我正在尝试使用 argparse 以一种只接受 none 或 once 的方式实现命令行参数。应拒绝多次出现。
我使用下面的代码
#!/usr/bin/env python3
import argparse
cmd_parser = argparse.ArgumentParser()
cmd_parser.add_argument('-o', dest='outfile')
cmd_line = cmd_parser.parse_args()
print(cmd_line.outfile)
一个参数给出了预期的结果:
./test.py -o file1
file1
当两次发出参数时,第一次出现的会被忽略:
./test.py -o file1 -o file2
file2
我还尝试了 nargs=1
和 action='store'
没有达到预期的结果。
我如何告诉 argparse 拒绝出现多个参数?
最佳答案
它可以用一个自定义的 Action 来安排:
import argparse
class Once(argparse.Action):
def __init__(self, *args, **kwargs):
super(Once, self).__init__(*args, **kwargs)
self._count = 0
def __call__(self, parser, namespace, values, option_string=None):
# print('{n} {v} {o}'.format(n=namespace, v=values, o=option_string))
if self._count != 0:
msg = '{o} can only be specified once'.format(o=option_string)
raise argparse.ArgumentError(None, msg)
self._count = 1
setattr(namespace, self.dest, values)
cmd_parser = argparse.ArgumentParser()
cmd_parser.add_argument('-o', dest='outfile', action=Once, default='/tmp/out')
cmd_line = cmd_parser.parse_args()
print(cmd_line.outfile)
您可以指定一个默认值:
% script.py
/tmp/out
您可以指定一次-o
:
% script.py -o file1
file1
但是指定 -o
两次会引发错误:
% script.py -o file1 -o file2
usage: script.py [-h] [-o OUTFILE]
script.py: error: -o can only be specified once
关于python - 只有一个带 argparse 的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14915986/