argparse:在位置参数之前需要可选参数

时间:2016-05-05 16:32:58

标签: python argparse

我有一个包装openssh客户端二进制文件的Python脚本,需要以相同的方式解析参数。我正在使用argparse。

使用ssh,这意味着连接到主机,登录为“a”,然后运行“ls”。

ssh -la host ls

虽然这意味着连接到主机并运行“ls -la”:

ssh host ls -la

argparse将这些视为一样。是否有一种惯用的方法来告诉argparse可选参数必须位于位置参数之前?

2 个答案:

答案 0 :(得分:4)

使用nargs=argparse.REMAINDER

import argparse

p = argparse.ArgumentParser()
p.add_argument('-l', '--login')
p.add_argument('host')
p.add_argument('cmd', nargs=argparse.REMAINDER)
print p.parse_args('-la server ls'.split())
print p.parse_args('server ls -la'.split())

结果:

Namespace(cmd=['ls'], host='server', login='a')
Namespace(cmd=['ls', '-la'], host='server', login=None)

答案 1 :(得分:-1)

我认为你想要完成的事情在argparse子命令概念中非常适合。看看它:https://docs.python.org/3/library/argparse.html#sub-commands