标签: argparse

metavar和action在Python中的argparse中意味着什么?

我正在阅读argparse模块.因为metavar和行动意味着什么,我陷入了困境

>>> 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)')
Run Code Online (Sandbox Code Playgroud)

我可能错过了,但从我读到的,我找不到metavar和的 定义action (action="store_const", etc).他们究竟是什么意思?

python action argparse

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

如何使用argparse打开文件?

我想用argparse打开文件进行阅读.在cmd中,它必须如下所示:my_program.py/filepath

这是我的尝试:

parser = argparse.ArgumentParser()
parser.add_argument('file', type = file)
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

python argparse

49
推荐指数
5
解决办法
7万
查看次数

Python argparse:很多选择导致丑陋的帮助输出

我有这个代码,我通常很高兴:

import argparse

servers = [ "ApaServer", "BananServer", "GulServer", "SolServer", "RymdServer",
            "SkeppServer", "HavsServer", "PiratServer", "SvartServer", "NattServer", "SovServer" ]

parser = argparse.ArgumentParser(description="A program to update components on servers.")
group = parser.add_mutually_exclusive_group()
group.add_argument('-l', '--list', dest="update", action='store_false', default=False, help='list server components')
group.add_argument('-u', '--updatepom', dest="update", action='store_true', help='update server components')
parser.add_argument('-o', '--only', nargs='*', choices=servers, help='Space separated list of case sensitive server names to process')
parser.add_argument('-s', '--skip', nargs='*', choices=servers, help='Space separated list of case sensitive server names to exclude from processing')
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

我喜欢选择=服务器为我验证输入中的服务器名称,所以我不必这样做.但是,有这么多有效的选择会使帮助输出看起来很糟糕:

usage: …
Run Code Online (Sandbox Code Playgroud)

python argparse

48
推荐指数
5
解决办法
3万
查看次数

Argparse:检查是否已传递任何参数

当没有给出参数时,我的脚本应该启动演示模式.我试过这个:

args = parser.parse_args()
if len(args) == 0:
    run_demo()
else:
    # evaluate args
Run Code Online (Sandbox Code Playgroud)

这给*** TypeError: object of type 'Namespace' has no len()作为args是没有列表.

我怎样才能达到我想要的目标?

python command-line-arguments argparse

46
推荐指数
5
解决办法
4万
查看次数

无法获取argparse读取带有破折号的带引号的字符串?

有没有办法让argparse将两个引号之间的任何内容识别为单个参数?它似乎继续看到破折号,并假设它是一个新选项的开始

我有类似的东西:

mainparser = argparse.ArgumentParser()
subparsers = mainparser.add_subparsers(dest='subcommand')
parser = subparsers.add_parser('queue')
parser.add_argument('-env', '--extraEnvVars', type=str,
                        help='String of extra arguments to be passed to model.')
...other arguments added to parser...
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时:

python Application.py queue -env "-s WHATEVER -e COOL STUFF"
Run Code Online (Sandbox Code Playgroud)

它给了我:

Application.py queue: error: argument -env/--extraEnvVars: expected one argument
Run Code Online (Sandbox Code Playgroud)

如果我离开第一个破折号,它的工作完全正常,但是能够传入带有破折号的字符串是至关重要的.我已经尝试用\来转义它,这会导致它成功但是将\添加到参数字符串有没有人知道如何解决这个问题?无论-s是否是解析器中的参数,都会发生这种情况.

编辑:我正在使用Python 2.7.

EDIT2:

python Application.py -env " -env"
Run Code Online (Sandbox Code Playgroud)

工作得非常好,但是

python Application.py -env "-env"
Run Code Online (Sandbox Code Playgroud)

才不是.

EDIT3:看起来这实际上是就是BEING已经讨论了一个错误:http://www.gossamer-threads.com/lists/python/bugs/89529,http://python.6.x6.nabble.com/issue9334- argparse-does-not-accept-options-taking-arguments-beginning-with-dash-regression-from-optp-td578790.html.它仅在2.7中而不是在optparse中.

EDIT4:当前的开放式错误报告是:http://bugs.python.org/issue9334

python command-line-interface argparse

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

如何迭代参数

我有这样的剧本:

import argparse

parser = argparse.ArgumentParser(
                description='Text file conversion.'
                )
parser.add_argument("inputfile",   help="file to process", type=str)
parser.add_argument("-o", "--out", default="output.txt",
                    help="output name")
parser.add_argument("-t", "--type", default="detailed",
                    help="Type of processing")

args = parser.parse_args()

for arg in args:
    print(arg)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我收到错误:

TypeError: 'Namespace' object is not iterable
Run Code Online (Sandbox Code Playgroud)

如何迭代参数及其值?

python argparse

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

使用argparse和python接受字典作为参数

我试图接受带有argparse的type = dict的参数,但无论输入它是否给出了无效dict值的错误.

#!/usr/bin/env python

import argparse

MYDICT = {'key': 'value'}

parser = argparse.ArgumentParser()
parser.add_argument("-m", "--mydict", action="store",
                    required=False, type=dict,
                    default=MYDICT)

args = parser.parse_args()

print args.mydict
Run Code Online (Sandbox Code Playgroud)

当我尝试将字典传递给脚本时会发生这种情况

./argp.py -m "{'key1': 'value1'}"
usage: argp.py [-h] [-m MYDICT]
argp.py: error: argument -m/--mydict: invalid dict value: "{'key1': 'value1'}"
Run Code Online (Sandbox Code Playgroud)

看看这些文件,我认为这是可能的.

http://docs.python.org/dev/library/argparse.html

"支持in运算符的任何对象都可以作为选项值传递,因此支持dict对象,设置对象,自定义容器等."

python dictionary argparse

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

如何创建Python命名空间(argparse.parse_args值)?

为了交互式地测试我的python脚本,我想创建一个Namespace对象,类似于返回的对象argparse.parse_args().显而易见的方式,

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.parse_args()
Namespace()
>>> parser.parse_args("-a")
usage: [-h]
: error: unrecognized arguments: - a

Process Python exited abnormally with code 2
Run Code Online (Sandbox Code Playgroud)

可能导致Python repl退出(如上所述)一个愚蠢的错误.

那么,使用给定属性集创建Python命名空间的最简单方法是什么?

例如,我可以动态创建dict(dict([("a",1),("b","c")]))但我不能将其用作Namespace:

AttributeError: 'dict' object has no attribute 'a'
Run Code Online (Sandbox Code Playgroud)

python namespaces argparse

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

在Python中使用'argparse.ArgumentError'

我想在Python ArgumentError中的argparse模块中使用异常,但我无法弄清楚如何使用它.签名说它应该被称为ArgumentError(argument, message),但我无法弄清楚argument应该是什么.我认为它应该是解析器对象的一部分,但我找不到任何文档.

python argparse

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

获取argparse中的其余参数

我想立刻获得所有剩余的未使用的参数.我该怎么做?

parser.add_argument('-i', action='store', dest='i', default='i.log')
parser.add_argument('-o', action='store', dest='o', default='o.log')
Run Code Online (Sandbox Code Playgroud)

python argparse

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