Python argparse 命名位置参数?

13
有没有办法使python的argparse.ArgumentParser像python函数一样处理命令行参数?这样参数就可以在不使用名称的情况下传递。
1个回答

7
文档中查看“整数”示例。不要包含任何连字符,否则该参数将被视为位置参数。
>>> 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')

我想保留使用这些名称的选项。我想要复制我从Python函数中获得的功能。 - capybaralet
你能提供位置参数和可选参数吗? - David C
表面上看起来这会很相似,但并不完全相同。您可以以任何一种方式提供值。但是当两者都未给出或同时使用时的行为可能会有所不同。 - hpaulj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接