标签: argparse

python argparse:如何在出错时自动显示帮助?

目前,当我输入无效选项或省略位置参数时,argparse会将我踢回提示并显示我的应用的使用情况.这没关系,但我宁愿自动显示完整的帮助列表(解释选项等),而不是要求用户输入

./myscript.py -h

谢谢!

杰米

python argparse

21
推荐指数
2
解决办法
2万
查看次数

argparse(python)是否支持互斥的参数组?

如果我有参数'-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 ..被调用?

python argparse

21
推荐指数
2
解决办法
8386
查看次数

是否可以使用argparse捕获任意一组可选参数?

是否可以使用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 argparse

21
推荐指数
1
解决办法
4215
查看次数

Argparse - 如何指定默认子命令

我正在使用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则被正确调用. …

python argparse

20
推荐指数
1
解决办法
1万
查看次数

Python argparse整数条件(> = 12)

我需要请求参数> = 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选项获得这个结果.

python argparse

20
推荐指数
3
解决办法
1万
查看次数

Python - docopt和argparse之间的区别

我必须编写一个命令行界面,我已经看到我可以使用docoptargparse.

我想知道两者之间的主要区别是什么,这样我才能做出明智的选择.

请坚持事实.我不想哇.docopt.如此美丽.很有用.

python command-line-arguments argparse docopt

20
推荐指数
3
解决办法
4476
查看次数

Python argparse无法将十六进制格式解析为int类型

我有以下代码尝试从调用的命令行获取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正确处理这个?

python argparse

20
推荐指数
2
解决办法
7145
查看次数

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='?',但是无法正常工作.

这个问题非常相似,但没有得到回答.

python argparse

19
推荐指数
3
解决办法
6438
查看次数

传递了附加参数的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)
Run Code Online (Sandbox Code Playgroud)

我想在触发选项-e时将其他参数传递给customAction,例如另一个类的实例.我怎样才能做到这一点?我尝试过的所有东西都出错了.

python action argparse

19
推荐指数
2
解决办法
1万
查看次数

按字母顺序排序argparse帮助

我正在使用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)

python sorting arguments command-line-arguments argparse

19
推荐指数
1
解决办法
2399
查看次数