目前,当我输入无效选项或省略位置参数时,argparse会将我踢回提示并显示我的应用的使用情况.这没关系,但我宁愿自动显示完整的帮助列表(解释选项等),而不是要求用户输入
./myscript.py -h
谢谢!
杰米
如果我有参数'-a', '-b', '-c', '-d',使用该add_mutually_exclusive_group()函数我的程序将只使用其中一个.有没有办法将它结合起来,以便程序只接受'-a 999 -b 999'或'-c 999 -d 999'?
编辑:添加一个简单的程序,以便更清晰:
>>> parser = argparse.ArgumentParser()
>>> group = parser.add_mutually_exclusive_group()
>>> group.add_argument('-a')
>>> group.add_argument('-b')
>>> group.add_argument('-c')
>>> group.add_argument('-d')
Run Code Online (Sandbox Code Playgroud)
然后./app.py -a | ./app.py -b | ./app.py -c | ./app.py -d才能被召唤.是否有可能让argparse组成为排除组,因此只能./app.py -a .. -b .. | ./app.py -c .. -d ..被调用?
是否可以使用argparse捕获任意一组可选参数?
例如,以下两者都应被接受为输入:
python script.py required_arg1 --var1 value1 --var2 value2 --var3 value3
python script.py required_arg1 --varA valueA --var2 value2 --varB valueB
Run Code Online (Sandbox Code Playgroud)
先验我不知道将指定哪些可选参数接收但会相应地处理它们.
我正在使用Python 2.7的argparse包为命令行工具编写一些选项解析逻辑.该工具应接受以下参数之一:
"ON":打开一个功能.
"关":关闭一个功能.
[无参数提供]:回显函数的当前状态.
查看argparse文档让我相信我想要定义两个 - 可能是三个 - 子命令,因为这三个状态是互斥的,代表不同的概念活动.这是我目前对代码的尝试:
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser.set_defaults(func=print_state) # I think this line is wrong.
parser_on = subparsers.add_parser('ON')
parser_on.set_defaults(func=set_state, newstate='ON')
parser_off = subparsers.add_parser('OFF')
parser_off.set_defaults(func=set_state, newstate='OFF')
args = parser.parse_args()
if(args.func == set_state):
set_state(args.newstate)
elif(args.func == print_state):
print_state()
else:
args.func() # Catchall in case I add more functions later
Run Code Online (Sandbox Code Playgroud)
我的印象是,如果我提供了0个参数,主解析器就会设置func=print_state,如果我提供了1个参数,主解析器将使用相应的子命令的默认值并调用func=set_state.相反,我得到0参数的以下错误:
usage: cvsSecure.py [-h] {ON,OFF} ...
cvsSecure.py: error: too few arguments
Run Code Online (Sandbox Code Playgroud)
如果我提供"OFF"或"ON",则print_state调用而不是set_state.如果我注释掉该parser.set_defaults行,set_state则被正确调用. …
我需要请求参数> = 12使用argparse.
我无法找到一种方法来获得这个结果argparse,似乎没有办法将规则设置为给定的值,但只有完整的接受值集合,如choices = ['rock','paper','scissors'].
我的代码是:
import sys, argparse
parser = argparse.ArgumentParser()
parser.add_argument("-b", "--bandwidth", type=int, help="target bandwidth >=12")
args = parser.parse_args()
if args.bandwidth and args.bandwidth < 12:
print "ERROR: minimum bandwidth is 12"
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法直接用一些argparse选项获得这个结果.
我必须编写一个命令行界面,我已经看到我可以使用docopt和argparse.
我想知道两者之间的主要区别是什么,这样我才能做出明智的选择.
请坚持事实.我不想哇.docopt.如此美丽.很有用.
我有以下代码尝试从调用的命令行获取DUT VID:
parser = argparse.ArgumentParser(description='A Test',
formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
group.add_argument("--vid",
type=int,
help="vid of DUT")
options = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
考虑命令行"python test.py --vid 0xabcd"我注意到argparse正在引发异常,因为它无法完成调用,int('0xabcd')因为它是基数16.如何让argparse正确处理这个?
我试图让argparse忽略这样一个事实,即当-l指定了一个可选的参数()时,不应该评估两个通常需要的位置参数.
基本上我试图复制--help的行为:当你指定-h时,忽略所有缺少的必需参数.
示例代码:
parser = argparse.ArgumentParser(description="Foo bar baz")
parser.add_argument('arg1', help='arg1 is a positional argument that does this')
parser.add_argument('arg2', help='arg2 is a positional argument that does this')
parser.add_argument('-l', '--list', dest='list', help='this is an optional argument that prints stuff')
options, args = parser.parse_args()
if options.list:
print "I list stuff"
Run Code Online (Sandbox Code Playgroud)
当然,如果我现在运行它,我得到:
error: too few arguments
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的东西nargs='?',但是无法正常工作.
这个问题非常相似,但没有得到回答.
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)
Run Code Online (Sandbox Code Playgroud)
我想在触发选项-e时将其他参数传递给customAction,例如另一个类的实例.我怎样才能做到这一点?我尝试过的所有东西都出错了.
我正在使用Python的(2.7)argparse工具,并希望按选项自动按字母顺序排序.
默认情况下,帮助条目按照添加顺序进行排序*,如下所示:
p = argparse.ArgumentParser(description='Load duration curves and other plots')
p.add_argument('--first', '-f', type=int, default=1, help='First Hour')
p.add_argument('--dur', '-d', type=int, default=-1, help='Duration in Hours. Use -1 for all')
p.add_argument('--title', '-t', help='Plot Title (for all plots), default=file name')
p.add_argument('--interp', '-i', action="store_true", default=True,
help='Use linear interpolation for smoother curves')
...
args = p.parse_args()
Run Code Online (Sandbox Code Playgroud)
当被称为python script -h产生时:
usage: script.py [-h] [--first FIRST] [--dur DUR] [--title TITLE] [--interp]
Load duration curves and other plots
optional arguments:
-h, --help show this help message and …Run Code Online (Sandbox Code Playgroud)