需要将`-`字符嵌入到python argparse中的参数中
Posted
技术标签:
【中文标题】需要将`-`字符嵌入到python argparse中的参数中【英文标题】:Need to embed `-` character into arguments in python argparse 【发布时间】:2016-04-30 11:02:06 【问题描述】:我正在设计一个工具来满足一些规范。我有一个场景,我希望参数包含 -
它的字符串。注意下面一行中的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 将args.args-1
解释为args.args - 1
,减法。
【参考方案1】:
Python argparse 模块用下划线替换破折号,因此:
if args.arg_1:
print "verbosity turned on"
Python 文档(15.4.3.11. dest 部分的第二段)指出:
任何内部
-
字符都将转换为_
字符以使 确保字符串是有效的属性名称。
【讨论】:
@sudhishkr--arg-1
是一个布尔值 (store_true),表示在命令行中传递时为 TRUE,不在命令行参数中时为 FALSE。这就是它的工作原理。布尔参数不能有值
我对那个不好。发表评论后,我真的意识到了这一点。我删除了我的,看起来你立即回复了。我正在采用您的方法,但将选择 Dan.D 的答案作为此 Q 的正确答案,因为它适用于任何特殊字符。谢谢@felipsmartins【参考方案2】:
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
方法。存在讨论是否应更改此行为的错误/问题。但就目前而言,如果你想让自己变得艰难,那是你的事。
在内部,argparse
使用getattr
和setattr
访问namespace
,以尽量减少对属性名称的限制。
【讨论】:
以上是关于需要将`-`字符嵌入到python argparse中的参数中的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 中嵌入 Python。传递接收列表列表的字符串向量
python使用textwrap包在已经生成的长字符串中嵌入回车符实战