如何在Python中实现argparse
我是Python的新手,我有一个小脚本可以将文件上传到S3,目前我只对脚本中的一个文件进行了硬编码,也要硬编码. . 我想在此脚本中合并argparse,以便我自己添加一些论点并上传不同的文件.例如,在命令行中,我可以指定参数以决定file_name x上传到bucket_name xxx. 我一直在阅读有关如何设置ArgParse的文档我们自己的争论).我知道逻辑,只是很难在实际代码中实现它们...有人可以给我一个例子或给我一些提示,非常感谢. 解决方案 这是脚本以命令行参数的外观. import argparse import datetime import logging import os import boto3 def make_new_key(filename: str): current_date = datetime.datetime.today().strftime('%Y-%m-%d_%H_%M_%S') # The
0 2024-01-26
编程技术问答社区
Python。optparse 能否有ACTION属性,既像STORE又像STORE_TRUE?
我正在使用optparse获取命令行输入. 假设我正在运行脚本demo.py,并且会产生一些输出.但是,除非我指定命令行输入,否则输出未写入文件. 我正在尝试执行以下操作: python demo.py在命令行中应运行脚本,但不要在任何地方写输出. python demo.py -o在命令行中应将输出写入我的默认文件名output.txt. python demo.py -o demooutput.txt在命令行中应将输出写入文件demooutput.txt. ps:我不想从optparse. 切换到argparse 解决方案 您可以使用这是对您的用例的工作方式. parser.add_option("-o", action="callback", dest="output", callback=my_callback) def my_callback(option, opt, value, parser): if len(pa
2 2024-01-09
编程技术问答社区
Python中argparse的metavar和action是什么意思?
我正在通过 argparse 模块.我被卡住了,要做的是什么意思 >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', ... help='an integer for the accumulator') >>> parser.add_argument('--sum', dest='accumulate', action='store_const', ... const=sum, default=max, ... help='sum the integers (default: find the max)') 我可能错过了,但是从我的阅读中,我找不到metavar的定义 action (action="store_const", etc).他们实际上是什么意思? 解决方
14 2024-01-09
编程技术问答社区
Python argparse 自定义动作,传递额外参数
import argparse class customAction(argparse.Action): def __call__(self, parser, args, values, option_string=None): setattr(args, self.dest, values) parser = argparse.ArgumentParser() parser.add_argument('-e', '--example', action=customAction) 触发选项-e时,我想将其他参数传递给customaction,例如另一个类的实例.我怎样才能做到这一点?我尝试过的一切都出错了. 解决方案 def make_action(additional_arg): class customAction(argparse.Action): def __call__(self, parser, args, val
0 2024-01-09
编程技术问答社区
python argparse-pass值不需要命令行。
我认为我不了解有关Python的Argparse的基本内容. 我试图将Google YouTube API用于Python脚本,但我不知道如何在不使用命令行的情况下将值传递给脚本. 例如,这里是API的示例. GitHub和其他地方的示例显示了从命令行调用的示例,从脚本称为脚本时传递argparse值. . 我不想使用命令行.我正在构建一个使用Decorator为用户获得登录凭据的应用程序,当用户想上传到其YouTube帐户时,他们提交了一份表格,然后将其调用此脚本并将ArgParse值传递给它. P> 如何将值传递给ArgParser(请参见YouTube上传API脚本中的代码的部分)来自另一个Python脚本? if __name__ == '__main__': argparser.add_argument("--file", required=True, help="Video file to upload") argparser.ad
6 2023-12-25
编程技术问答社区
使用Python获取Youtube数据
我正在尝试学习如何分析网络上可用的社交媒体数据,而我从YouTube开始. from apiclient.errors import HttpError from outh2client.tools import argparser from apiclient.discovery import build import pandas as pd DEVELOPER_KEY = "AIzaSyB_F1mCrDydEbGUosnZES-NW-mg1CaOyjI" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" argparser.add_argument("--q", help="Search term", default="apple product") argparser.add_argument("--max-results", help="Max results", default=50) arg
0 2023-12-25
编程技术问答社区
在python中使用argparse将csv转换为xml
一个非常快速的Quesiton,基本上我的程序采用一个InputFile,即CSV文件,然后将其转换为XML文件.但是,XML文件的名称可以由用户输入设置,或者用户未指定名称,则XML文件的名称将与CSV文件具有相同的名称,但使用.xml扩展名.我需要后者的帮助.到目前为止,当给出输出文件的名称时,我的程序可以工作,但是当用户未输入名称时,我不知道如何设置XML文件名.我知道,如果用户未设置名称,则argparse.outputfile不可行,我可以编写一个简单的IF语句检查,但我不知道如何将名称设置为与CSV文件名相同.这是我的代码: import sys, argparse import csv import indent from xml.etree.ElementTree import ElementTree, Element, SubElement, Comment, tostring parser=argparse.ArgumentParser(description
2 2023-12-22
编程技术问答社区
Python 'sys.argv'的最大参数数是否有限制?
我有一个需要处理大量文件的Python脚本.为了绕过Linux对可以传递给命令的参数数量的相对较小的限制,我将find -print0与xargs -0. 一起使用 我知道另一个选择是使用Python的Glob模块,但是当我拥有更高级的find命令,寻找修改时间等时,这无济于事. 在大量文件上运行我的脚本时,Python仅接受参数的一个子集,我首先认为是argparse中的限制,但似乎在sys.argv中.我找不到任何文档.是一个错误吗? 这是一个示例python脚本,说明了这一点: import argparse import sys import os parser = argparse.ArgumentParser() parser.add_argument('input_files', nargs='+') args = parser.parse_args(sys.argv[1:]) print 'pid:', os.getpid(), 'argv fi
0 2023-12-17
编程技术问答社区
parse_args 一个解析器参数中的所有.png文件
我想获得一个arg.pics返回['pic1.png', 'pic2.png', 'pic3.png'](任意解析.png格式的所有文件)之类的内容(test.py): import argparse import os def parser_arg(): par = argparse.ArgumentParser() parser = par.add_argument_group('pictures') parser.add_argument("-p", "--pics", nargs="+", help="picture files", required=True) arguments = par.parse_args() return arguments args = parser_arg() 通过命令行运行脚本后,输入 python test.py -p ../User/Desktop/Data/*.png 然后ar
4 2023-12-07
编程技术问答社区
Python。参数解析验证的最佳实践
使用ArgParse模块在解析参数时添加验证吗? 是可能的吗? from argparse import ArgumentParser parser = ArgumentParser(description='Argument parser for PG restore') parser.add_argument('--database', dest='database', default=None, required=False, help='Database to restore') parser.add_argument('--backup', dest='backup', required=True, help='Location of the backup file') parsed_args = parser.parse_args() 可以在此参数解析器中添加验证检查,以确保存
2 2023-11-12
编程技术问答社区
用Tkinter将Python argparse CLI程序转换为GUI?
我有一个简单的基于CLI的程序,我想将GUI添加到.最佳情况下,我也想保留通过CLI运行此脚本的能力.如果可以做到这一点,那么最好的方法是什么?免责声明:我对tkinter是相对较新的! from argparse import ArgumentParser from ipaddress import IPv4Network def Main(): """ Main Program """ parser = ArgumentParser( description='Provided a list of IP addresses, format and output the correct fortigate commands to create them') parser.add_argument('VDOM', help='Specify a VDOM', type=str) parser.add_argument(
34 2023-11-11
编程技术问答社区
处理argparse输入中的空格
使用Python和ArgParse,用户可以输入以-D为标志的文件名. parser.add_argument("-d", "--dmp", default=None) 但是,当路径包括空间时,这失败了.例如. -d C:\SMTHNG\Name with spaces\MORE\file.csv 注意:这些空间将导致错误(标志仅在'c:smthng \ name'作为输入中). error: unrecognized arguments: with spaces\MORE\file.csv 我花了比应该找到解决这个问题的解决方案更长的时间... (没有为此找到问答,所以我要发表自己的帖子) 解决方案 简单解决方案: 如果用引文标记封装了一个参数,则ArgParse将填充的字符串视为单个参数. 此输入有效并"解决"了问题: -d "C:\SMTHNG\Name with spaces\MORE\file.csv" 注意:围绕它的参数为
16 2023-11-10
编程技术问答社区
在UNIX环境下运行时,防止在非引用的Python脚本参数中扩展通配符
我有一个python脚本,我想提供一个包含通配符的参数(通常),指的是我想使用的一系列文件.示例在这里: #!/usr/bin/env python import argparse import glob parser = argparse.ArgumentParser() parser.add_argument('-i', action="store", dest="i") results = parser.parse_args() print 'argument i is: ', results.i list_of_matched_files = glob.glob(results.i) 在这种情况下,如果用户将引号添加到传递的参数中,一切都很好: ./test_script.py -i "foo*.txt" ...但是通常情况下,用户忘记了在参数中添加引号,而当列表仅包含第一个匹配时,由于Unix已经扩展了列表,而ArgParse仅在然后获得第一个列表元素
8 2023-11-08
编程技术问答社区
带有命令行参数的Unittest
从我从另一个如此帖子中理解的内容,即通过argparse进行命令行参数的脚本,我应该做以下代码之类的事情,将sys.argv [0]作为arg. 提供 import unittest import match_loc class test_method_main(unittest.TestCase): loc = match_loc.main() self.assertEqual(loc, [4]) if __name__ == '__main__': sys.argv[1] = 'aaaac' sys.argv[2] = 'ac' unittest.main(sys.argv[0]) 这返回错误: usage: test_match_loc.py [-h] text patterns [patterns ...] test_match_loc.py: error: the following arguments are re
8 2023-11-07
编程技术问答社区
我怎样才能测试我的代码是否抛出了适当的argparse异常?
来自这个很好的答案我学会了将参数放在自己的功能中以简化单元测试. 来自这个答案我了解到,有时您需要提出自己的解析器错误才能获得Argparse来执行您的行为来执行您的行为想.例如: if not (args.process or args.upload): parser.error('No action requested, add -process or -upload') ,但是很难测试这是否可以做什么,因为投掷解析器错误也会退出程序.因此,这样的测试柜将无法使用: def test_no_action_error(self): '''Test if no action produces correct error''' with self.assertRaises(ArgumentError) as cm: args = parse_args(' ') self.assertEqual('No action re
4 2023-11-07
编程技术问答社区
蟒蛇的unittest for argparse
我在一个创建argparse的模块中具有一个函数: def get_options(prog_version='1.0', prog_usage='', misc_opts=None): options = [] if misc_opts is None else misc_opts parser = ArgumentParser(usage=prog_usage) if prog_usage else ArgumentParser() parser.add_argument('-v', '--version', action='version', version='%(prog)s {}'.format(prog_version)) parser.add_argument('-c', '--config', dest='config', required=True, help='the path to the configuration f
6 2023-11-07
编程技术问答社区
使用unittest测试argparse-exit错误
从 Greg Haskin在此问题中的回答,我试图实现一个统计,以检查Argparse是否给适当的错误当我通过它时,choices中不存在一些arg.但是,unittest使用下面的try/except语句生成误报. 此外,当我仅使用with assertRaises语句进行测试时,argparse迫使系统退出,并且该程序将不再执行任何测试. 我希望能够为此进行测试,但是鉴于argparse在错误时退出? 也许是多余的? #!/usr/bin/env python3 import argparse import unittest class sweep_test_case(unittest.TestCase): """Tests that the merParse class works correctly""" def setUp(self): self.parser=argparse.ArgumentParser()
10 2023-11-07
编程技术问答社区
Argparse单元测试。抑制帮助信息的出现
我正在编写用于实施ARGPARSE的测试用例.我打算测试" -h"功能.以下代码可以做到.但这也输出了脚本的用法.有没有办法抑制它? self.assertRaises(SystemExit, arg_parse_obj.parse_known_args, ['-h']) 另外,我们可以检查抛出的异常号码吗?例如,'-h'抛出 systemexit:0 ,而无效或不足的args投掷 systemexit:2 .有没有办法检查数字代码? 解决方案 在测试异常代码时,请使用作为上下文经理;这使您可以访问提高的例外,让您测试.code属性: with self.assertRaises(SystemExit) as cm: arg_parse_obj.parse_known_args(['-h']) self.assertEqual(cm.exception.code, 0) 要"抑制"或测试输出,您必须捕获sys.stdout或sys.stderr,具体
6 2023-11-07
编程技术问答社区
如何为python模块的argparse部分编写测试?
我有一个使用ArgParse库的Python模块.如何为代码库的该部分编写测试? 解决方案 您应该重构代码并将解析移至函数: def parse_args(args): parser = argparse.ArgumentParser(...) parser.add_argument... # ...Create your parser as you like... return parser.parse_args(args) 然后在您的main函数中,您应该使用以下方式调用: parser = parse_args(sys.argv[1:]) (sys.argv代表脚本名称的第一个元素将被删除以在CLI操作期间不作为附加开关发送.) 在测试中,您可以使用要使用的任何参数列表来调用解析器函数: def test_parser(self): parser = parse_args(['-l', '-m'])
8 2023-11-07
编程技术问答社区
Python Unicode 编码
我正在使用argparse在我的Python代码的论点中阅读.这些输入之一是可以包含Unicode字符的文件[title]的标题.我一直在使用22少女時代22作为测试字符串. 我需要将输入title的值写入文件,但是当我尝试将字符串转换为UTF-8时,它总是会引发错误: unicodedecodeerror:'ascii'编解码器不能在位置2中解码字节0x8f:ordinal 不在范围(128) 我一直在环顾四周,看到我需要以u"foo"的形式来调用.encode(). 当我从argparse的输入上运行type()时,我会看到: 我希望得到: 的回应 如何以正确的形式获得它? 想法: 修改argparse要吸入str,但将其存储为Unicode String u"foo": parser.add_argument(u'title', metavar='T', type
12 2023-11-06
编程技术问答社区