我有一个包装openssh客户端二进制文件的Python脚本,需要以相同的方式解析参数。我正在使用argparse。
使用ssh,这意味着连接到主机,登录为“a”,然后运行“ls”。
ssh -la host ls
虽然这意味着连接到主机并运行“ls -la”:
ssh host ls -la
argparse将这些视为一样。是否有一种惯用的方法来告诉argparse可选参数必须位于位置参数之前?
答案 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