Python argparse:nargs ='?' 和可选参数

假设我有一个名为readfile.py的简单程序,它使用Python的argparse支持命令行参数。

该程序从位置参数input指定的文件读取。 没有指定更多的参数,这个程序并不是很令人兴奋。 它只是从input读取并退出。 可选参数--output [OUTPUT_FILE]表示输入文件应写入文件。 OUTPUT_FILE也是可选的。 如果未指定,则输入应写入default.out

我设置了我的参数解析器,如下所示:

parser = argparse.ArgumentParser(description='Read from a file')
parser.add_argument(
    'input',
    help='file to read from')
parser.add_argument(
    '--output',
    nargs='?',
    const='default.out',
    default=None,
    help="""write file to %(metavar)s. If %(metavar)s isn't
         specified, write file to %(const)s.""",
    metavar='OUTPUT_FILE')
args = parser.parse_args()
return args.file, args.output_file

注意我使用default=None所以如果--ouput没有出现在命令行上,我可以用None来检测它的缺失。

其中给出了这样的使用签名:

usage: readfile.py [-h] [--output [OUTPUT_FILE]] input

如果我运行,这将处理参数

python readfile.py input.in --output somefile.out

要么

python readfile.py --output somefile.out input

如果我运行它将output设置为default.out

python readfile.py input.in --output

但如果我跑

python readfile.py --output input.in

它抱怨说争论太少。 我认为argparse对于解释这种模式已经足够“聪明”了,将input设置为input.inoutputdefault.out 。 生成的用法甚至表明了这一点。

我错过了什么吗?


不,它不会承认这一点。 你在最后一个例子中明确地将input.in --output--output

我会建议你翻转defaultconst参数。 你希望默认是default.out,所以它应该是default='default.out' 。 对于具有空--output参数的情况, const可以被设置为其他值。

这样,除非要更改默认值,否则不必添加--output参数,并且如果要输出到stdout ,则可以使用空的--output参数。


您可以通过“ - ”标记任何选项的结束。 例如:

python readfile.py --output -- input

具有预期的效果。 但是,要求 - 输出要求并允许:

python readfile.py --output - input

可能更干净。

链接地址: http://www.djcxy.com/p/28553.html

上一篇: Python argparse: nargs='?' and optional arguments

下一篇: Python argparse command line flags without arguments