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

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

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

例如。所以我可以写

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相当不透明。

How do I add an optional flag to my command line args?

eg. so I can write

python myprog.py 

or

python myprog.py -w

I tried

parser.add_argument('-w')

But I just get an error message saying

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

which I take it means that it wants an argument value for the -w option. What’s the way of just accepting a flag?

I’m finding http://docs.python.org/library/argparse.html rather opaque on this question.


回答 0

如您所愿,参数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

As you have it, the argument w is expecting a value after -w on the command line. If you are just looking to flip a switch by setting a variable True or False, have a look at http://docs.python.org/dev/library/argparse.html#action (specifically store_true and store_false)

import argparse

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

where action='store_true' implies default=False.

Conversely, you could haveaction='store_false', which implies default=True.


回答 1

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

资料来源: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

Adding a quick snippet to have it ready to execute:

Source: 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

Usage:

python myparser.py -w
>> True

回答 2

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

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

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

Here’s a quick way to do it, won’t require anything besides sys.. though functionality is limited:

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

[1:] is in case if the full file name is --flag