【发布时间】:2018-11-13 21:36:24
【问题描述】:
我可以选择读取用户输入的列表。该列表可以具有随机长度。这是我的代码:
parser.add_argument('-at', '--addTests', metavar=('test_commands'), nargs='+')
使用 'metavar' 是为变量命名的好方法,但当 nargs 不固定时,它就不好用了。
我从这一行得到的结果是:
-at test_command [test_command ...], --addTests test_command [test_command]
我希望结果只显示一次“test_command”。
【问题讨论】:
-
这是预期行为。如果你想让多个
metavars显示在[ ]里面,那么你需要使用parser.add_argument('-at', '--addTests', metavar=('test_command', 'test_command2'), nargs='+') -
@ResetACK 这不是我想要的。用户应该提供任意数量的输入,解析器将它们视为一个列表变量
-
元变量只是占位符,它们不会被参数解析器存储。如果您使用我给您的内容并提供以空格分隔的命令列表,它将为您提供您正在寻找的输出。详情见我的回答。
-
我刚刚意识到你在哪里感到困惑:你认为
--addTests test_command [test_command]意味着[test_command]是一个参数列表。[arg]表示法用于可选参数。由于您使用了nargs='+',因此用户必须为-at/--addTests选项提供至少一个参数,对于--addTests,任何其他参数都是可选的 -
因此,在调用脚本时使用
--addTests test_command test_command2,args = parser.parse_args()将给出以下解析的参数:Namespace(addTests=['test_command', 'test_command2']。然后您可以使用for command in args.addTests: print command访问它们(或者您可以运行它们而不是打印,等等。