可选的非位置参数Python程序

时间:2019-07-25 08:45:50

标签: python argparse

我有一个要在bash中从命令行运行的Python代码。它接收以下参数:

parser = argparse.ArgumentParser()
parser.add_argument('a')
parser.add_argument('b')
parser.add_argument('c', nargs='?', default=None)
parser.add_argument('d', nargs='?', default=None)
parser.add_argument('e', nargs='?', default=None)

arg_parser = create_arg_parser()
parsed_args, unknown = arg_parser.parse_known_args()
print(parsed_args)

a b 是唯一的强制性参数。我希望 c d e 是可选的,因此,如果用户未指定它们,则程序仍然可以运行。

在前面的代码中,我打印参数是因为遇到指定参数的问题。

如果我这样运行程序:

python myScript.py a1 b1 c1 d1 e1

它完美地工作!输出为:

a='a1', b='b1', c='c1', d='d1', e='e1'

如果我这样做(我省略了参数'e'):

python myScript.py a1 b1 c1 d1

输出再次正常(我希望'e'为None):

a='a1', b='b1', c='c1', d='d1', e=None

但是,问题出在我这样做时:

python myScript.py a1 b1 d1

输出为:

a='a1', b='b1', c='d1', d=None, e=None

我不希望d1与c有关,但与d有关。我不会告诉程序在提供的可选参数中采用ANY顺序。您有解决此问题的想法吗?

1 个答案:

答案 0 :(得分:0)

parser = argparse.ArgumentParser()
parser.add_argument('a')
parser.add_argument('b')
parser.add_argument('-c')
parser.add_argument('-d')
parser.add_argument('-e')

parsed_args = parser.parse_args()
print(parsed_args)

一起使用
python myScript.py a1 b1 -c c1 -d d1
python myScript.py a1 -d d1 b1
etc