需要将 `-` 字符嵌入到 python argparse 中的参数中
Need to embed `-` character into arguments in python argparse
我正在设计一个工具来满足一些规范。我有一个场景,我希望参数包含 -
它的字符串。注意下面一行中的arg-1
。
python test.py --arg-1 arg1Data
我正在 python27
上使用 argparse
库。出于某种原因,argparse 与上述试验混淆了。
我的问题是如何避免这种情况?如何在我的论点中保留 -
?
示例程序(包含 -
,如果删除它一切正常):
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--arg-1", help="increase output verbosity")
args = parser.parse_args()
if args.args-1:
print "verbosity turned on"
Python argparse 模块用下划线替换破折号,因此:
if args.arg_1:
print "verbosity turned on"
Python 文档(第 15.4.3.11. dest 节的第二段)指出:
Any internal -
characters will be converted to _
characters to make
sure the string is a valid attribute name.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--arg-1", help="increase output verbosity")
parser.add_argument("arg-2")
args = parser.parse_args()
print(args)
产生:
1750:~/mypy$ python stack34970533.py -h
usage: stack34970533.py [-h] [--arg-1 ARG_1] arg-2
positional arguments:
arg-2
optional arguments:
-h, --help show this help message and exit
--arg-1 ARG_1 increase output verbosity
和
1751:~/mypy$ python stack34970533.py --arg-1 xxx yyy
Namespace(arg-2='yyy', arg_1='xxx')
第一个参数是 optional
。您可以在命令行中使用“--arg-1”,但该值存储为 args.arg_1
。 Python 会将 args.arg-1
解释为 args.arg - 1
。 unix 命令行允许带有 -
标志的历史由来已久。它试图平衡这两种传统。
它让您完全控制 positionals
dest
属性,并且不会将 -
更改为 _
。如果你想访问它,你必须使用 getattr
方法。 bug/issue 正在讨论是否应更改此行为。但现在,如果你想让自己难受,那是你的事。
在内部,argparse
使用 getattr
和 setattr
访问 namespace
以最小化对属性名称的限制。
我正在设计一个工具来满足一些规范。我有一个场景,我希望参数包含 -
它的字符串。注意下面一行中的arg-1
。
python test.py --arg-1 arg1Data
我正在 python27
上使用 argparse
库。出于某种原因,argparse 与上述试验混淆了。
我的问题是如何避免这种情况?如何在我的论点中保留 -
?
示例程序(包含 -
,如果删除它一切正常):
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--arg-1", help="increase output verbosity")
args = parser.parse_args()
if args.args-1:
print "verbosity turned on"
Python argparse 模块用下划线替换破折号,因此:
if args.arg_1:
print "verbosity turned on"
Python 文档(第 15.4.3.11. dest 节的第二段)指出:
Any internal
-
characters will be converted to_
characters to make sure the string is a valid attribute name.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--arg-1", help="increase output verbosity")
parser.add_argument("arg-2")
args = parser.parse_args()
print(args)
产生:
1750:~/mypy$ python stack34970533.py -h
usage: stack34970533.py [-h] [--arg-1 ARG_1] arg-2
positional arguments:
arg-2
optional arguments:
-h, --help show this help message and exit
--arg-1 ARG_1 increase output verbosity
和
1751:~/mypy$ python stack34970533.py --arg-1 xxx yyy
Namespace(arg-2='yyy', arg_1='xxx')
第一个参数是 optional
。您可以在命令行中使用“--arg-1”,但该值存储为 args.arg_1
。 Python 会将 args.arg-1
解释为 args.arg - 1
。 unix 命令行允许带有 -
标志的历史由来已久。它试图平衡这两种传统。
它让您完全控制 positionals
dest
属性,并且不会将 -
更改为 _
。如果你想访问它,你必须使用 getattr
方法。 bug/issue 正在讨论是否应更改此行为。但现在,如果你想让自己难受,那是你的事。
在内部,argparse
使用 getattr
和 setattr
访问 namespace
以最小化对属性名称的限制。