不带参数的Python argparse命令行标志


345

如何在命令行参数中添加可选标志?

例如。所以我可以写

python myprog.py 

要么

python myprog.py -w

我试过了

parser.add_argument('-w')

但是我收到一条错误消息说

Usage [-w W]
error: argument -w: expected one argument

我认为这意味着它需要-w选项的参数值。接受旗帜的方式是什么?

我在这个问题上发现http://docs.python.org/library/argparse.html相当不透明。


4
如果您只想在脚本中添加1标志,则sys.argv会容易得多。除非您专门尝试学习argparse,否则这是一个好习惯,因为它是一个方便的模块。
chown

2
即使现在我知道了答案,我仍然看不到如何从文档中理解答案。
安德烈亚斯·哈弗堡

Answers:


531

如您所愿,参数w在命令行中的-w之后需要一个值。如果您只是想通过设置变量True或来翻转开关False,请访问http://docs.python.org/dev/library/argparse.html#action(特别是store_true和store_false)

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-w', action='store_true')

其中action='store_true'暗示default=False

相反,您可能有action='store_false',这意味着default=True


3
@Jdog,为什么不适合我?在w始终False
Iulian Onofrei 2015年

52

添加一个快速片段以使其可以执行:

资料来源:myparser.py

import argparse
parser = argparse.ArgumentParser(description="Flip a switch by setting a flag")
parser.add_argument('-w', action='store_true')

args = parser.parse_args()
print args.w

用法:

python myparser.py -w
>> True

-10

这是一种快速的方法,sys尽管功能有限,但除了.. 之外不需要任何其他功能:

flag = "--flag" in sys.argv[1:]

[1:] 如果完整的文件名是 --flag


13
只需登录只是为了表达从长远来看这是一个多么糟糕的想法。假设您首先检查sys.argv中是否包含字符串“ --flag”。然后,您查看sys.argv [-1]的末尾以查看要打开的文件。突然之间,您遇到了以下情况:如果您尝试打开一个名为的文件--flag,则该文件的行为会异常,更糟糕的是,当不信任的数据最终被入侵时,这往往最终会成为一个安全漏洞。传递给argv。最后,不应该使用此方法。真正的arg解析器
要强大得多

3
如前所述,该解决方案根本不可靠,但是如果您需要超快完成此操作(例如出于测试目的),则可以使用该解决方案。绝对不要将其与生产代码区分开。
乔纳森·苏迪亚曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.