标签: argparse

使用argparse解析形式为"arg = val"的参数

我想使用argparse来解析形式为"arg = val"的命令行.例如,用法是:

script.py conf_dir=/tmp/good_conf
Run Code Online (Sandbox Code Playgroud)

要实现它,我这样做:

desc   = "details"
parser = argparse.ArgumentParser(description=desc, add_help=False)
args = parser.add_argument("conf_dir")
args = parser.parse_args("conf_dir=FOO".split())
args = parser.parse_args()
print args.conf_dir
Run Code Online (Sandbox Code Playgroud)

但是,问题在于,在调用脚本时:

python script.py conf_dir=/tmp/good_conf
Run Code Online (Sandbox Code Playgroud)

我明白了:

conf_dir=/tmp/good_conf
Run Code Online (Sandbox Code Playgroud)

我期待的地方

/tmp/good_conf
Run Code Online (Sandbox Code Playgroud)

所以,问题是:我可以使用argparse来解析包含名称值对的cmd行吗?任何提示?

编辑:我想这样做的原因而不是像--conf_dir =/tmp/good_dir这样的东西是因为还有其他工具(用其他语言编写),它使用conf_dir =/tmp/good_dir样式的参数.为了保持一致性,我是以这种方式解析args.

python command-line parsing argparse

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

argparse可选的subparser(for --version)

我有以下代码(使用Python 2.7):

# shared command line options, like --version or --verbose
parser_shared = argparse.ArgumentParser(add_help=False)
parser_shared.add_argument('--version', action='store_true')

# the main parser, inherits from `parser_shared`
parser = argparse.ArgumentParser(description='main', parents=[parser_shared])

# several subcommands, which can't inherit from the main parser, since
# it would expect subcommands ad infinitum
subparsers = parser.add_subparsers('db', parents=[parser_shared])

...

args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

现在我希望能够调用此程序,例如--version附加到正常程序或某个子命令:

$ prog --version
0.1

$ prog db --version
0.1
Run Code Online (Sandbox Code Playgroud)

基本上,我需要声明可选的subparsers.我知道这不是真的支持,但有没有任何变通方法或替代方案?

编辑:我收到的错误消息:

$ prog db --version
# works fine

$ prog --version
usage: …
Run Code Online (Sandbox Code Playgroud)

python command-line-interface argparse subcommand

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

如何在python中编写argparse组合选项

我很困扰这项小活动要完成.我做了一些实验,但未能达到效果.

需求:

   test2.py [-c/-v] -f
Run Code Online (Sandbox Code Playgroud)

用法或规则:

  1. -c(比较)需要2个参数.

    -v(验证)需要1个参数.

    这两者中的任何一个都必须存在,但不能同时存在.

  2. -f是必需参数(输出文件名).

输出:

我能够得到所需的输出,如下所示

kp@kp:~/Study/scripts$ ./test.py -c P1 P2 -f p
kp@kp:~/Study/scripts$ ./test.py -v P1 -f p
kp@kp:~/Study/scripts$ ./test.py -v P1 
usage: test.py <functional argument> <ouput target argument>
test.py: error: argument -f/--file is required
kp@kp:~/Study/scripts$ ./test.py -c P1 P2 
usage: test.py <functional argument> <ouput target argument>
test.py: error: argument -f/--file is required
kp@kp:~/Study/scripts$ 
Run Code Online (Sandbox Code Playgroud)

问题是:

当您使用时test.py -h,
1 .输出不会指示-c/-v中的任何一个是强制性的,而不是两者.它表示所有参数都是可选的.
2.输出将在可选参数下指示-f选项,这是不正确的.-f是必需参数,我想显示外部 - 可选参数.

如何更改脚本以便-h选项输出更加用户友好(无需任何外部验证)

usage: test.py …
Run Code Online (Sandbox Code Playgroud)

python argparse

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

Python:没有破折号的argparse可选参数

我想有以下语法:

python utility.py file1 FILE1 file2 FILE2
Run Code Online (Sandbox Code Playgroud)

其中file1和file2是可选参数.使用这种语法很简单:

python utility.py --file1 FILE1 --file2 FILE2
Run Code Online (Sandbox Code Playgroud)

运用

parser.add_argument('--file1',type=file)
parser.add_argument('--file2',type=file)
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除破折号,argparse开始将其解释为位置而非可选参数......

换句话说,是否可以专门告诉argparse一个参数是可选的还是位置的,这样我可以有没有破折号的可选参数?

python optional-arguments argparse

18
推荐指数
1
解决办法
6489
查看次数

如何使用argparse使用前导减号(负数)解析位置参数

我想解析一个包含以逗号分隔的整数列表的必需的位置参数.如果第一个整数包含一个前导减号(' - '),argparse会抱怨:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('positional')
parser.add_argument('-t', '--test', action='store_true')
opts = parser.parse_args()
print opts

$ python example.py --test 1,2,3,4
Namespace(positional='1,2,3,4', test=True)

$ python example.py --test -1,2,3,4
usage: example.py [-h] [-t] positional
example.py: error: too few arguments

$ python example.py --test "-1,2,3,4"
usage: example.py [-h] [-t] positional
example.py: error: too few arguments
Run Code Online (Sandbox Code Playgroud)

我见过人们建议除了-作为旗帜角色之外还使用其他一些角色,但我宁愿不这样做.是否有另一种方法来配置argparse以允许两个--test-1,2,3,4作为有效参数?

python command-line-arguments argparse

18
推荐指数
2
解决办法
9805
查看次数

显示pydoc的描述作为argparse' - help'的一部分

我在我的脚本中使用argparse.ArgumentParser(),我想显示我的脚本的pydoc描述作为argparse的' - help'选项的一部分.

一种可能的解决方案是使用ArgumentParser 的formatter_classdescription属性来配置帮助的显示.但在这种情况下,我们需要在内部使用'pydoc'命令来获取描述.

我们还有其他方法(可能是优雅的)吗?

python pydoc argparse

18
推荐指数
1
解决办法
5769
查看次数

什么是命名空间对象?

import argparse

parser = argparse.ArgumentParser(description='sort given numbers')
parser.add_argument('-s', nargs = '+', type = int)
args = parser.parse_args()
print(args)
Run Code Online (Sandbox Code Playgroud)

在命令行上运行命令时

python3 file_name.py -s 9 8 76

它打印 Namespace(s=[9, 8, 76]).

如何访问列表[9,8,76]?什么是命名空间对象.我在哪里可以了解更多信息?

python argparse

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

argparse参数顺序

我有一点问题.

argparse用来解析我的论点,而且它运作得很好.

有了args,我这样做:

p_args = parser.parse_args(argv)
args = dict(p_args._get_kwargs())
Run Code Online (Sandbox Code Playgroud)

但问题p_args是我不知道如何通过它们在命令行中的位置来排序这些参数,因为它是一个字典.

那么有没有可能在命令行中按顺序在元组/列表/有序字典中包含参数?

python arguments kwargs argparse

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

Argparse python,删除帮助菜单中的subparser列表

我正在使用Argparse编写一个命令行实用程序,并添加了一堆sub_parsers(子命令).在帮助菜单中,它们出现在一个名为"命令"的组下面,我得到了一个很好的列表,列出了所有可能的选项.但是,在此列表出现之前,所有相同的命令都显示在大括号中的组标题下,如下所示:

Commands:
    {foo, bar}

    foo          - foo does foo
    bar          - bar does bar
Run Code Online (Sandbox Code Playgroud)

我想删除大括号中出现的冗余条目.它只出现在这个充满sub_parsers的组中.

我处理它的代码如下所示:(其中解析器是ArgumentParser()实例)

subparsers = parser.add_subparsers(title="Commands")

foo = subparsers.add_parser("foo", help="- foo does foo")
bar = subparsers.add_parser("bar", help="- bar does bar")
Run Code Online (Sandbox Code Playgroud)

我已经查看了我的命令操作组的属性和方法,似乎无法找到任何可以解决这个问题的方法(至少从我能理解的方面).我不确定是否还有其他人处理过此事,我意识到这可能有点模糊.而且,我要做的就是找到删除大括号中出现的命令的冗余列表的方法.

python argparse

17
推荐指数
2
解决办法
2683
查看次数

Pip没有从pypi安装最新的可用版本(在本例中为argparse)

问题

我最近参与了一些python项目,并且在pip没有安装某些要求的最新版本时遇到了很多问题.我在osx和我用brew安装Python 2.7.6.在我正在研究的项目中,我们只是pip install -r requirements.txt.在目前的情况下,我需要安装argparse==1.2.1.这是pypi网站上显示的实际最新版本

这是我的输出

Downloading/unpacking argparse==1.2.1 (from -r requirements.txt (line 4))
Could not find a version that satisfies the requirement argparse==1.2.1 (from -r requirements.txt (line 4)) (from versions: 0.1.0, 0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.8.0, 0.9.0, 0.9.1, 1.0.1, 1.0, 1.1)
Some externally hosted files were ignored (use --allow-external to allow).
Cleaning up...
No distributions matching the version for argparse==1.2.1 (from -r requirements.txt …
Run Code Online (Sandbox Code Playgroud)

python macos pip pypi argparse

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