python argparse命名位置参数?

时间:2015-10-10 06:44:45

标签: python command-line-arguments argparse

有没有办法让python的argparse.ArgumentParser以python函数处理参数的方式处理命令行参数?那么参数可以在没有名字的情况下传递?

1 个答案:

答案 0 :(得分:1)

请参阅documentation中带有“整数”的示例。不要包含任何连字符,并且该参数将被视为位置参数。

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('first_supplied_argument', help='help')
>>> parser.add_argument('second_supplied_argument', help='help')
>>> args = parser.parse_args(['1', '2'])
Namespace(first_supplied_argument='1', second_supplied_argument='2')

根据评论进行修改:

你能提供位置和可选参数吗?我认为你仍然需要提供至少一个位置参数。

parser = argparse.ArgumentParser()
parser.add_argument('--first', help='help')
parser.add_argument('first', nargs='?', help='help')
parser.add_argument('--second', help='help')
parser.add_argument('second', nargs='?', help='help')

print parser.parse_args(['1', '2'])
print parser.parse_args(['1', '--second', '2'])
print parser.parse_args(['--first', '1', '--second', '2'])  # doesn't work
print parser.parse_args(['', '--first', '1', '--second', '2'])  # probably not what you want to do

输出:

Namespace(first='1', second='2')
Namespace(first='1', second='2')
Namespace(first=None, second=None)  # doesn't work
Namespace(first='1', second='2')