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

2024-05-16 18:47:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

对于ssh,这意味着连接到主机,以“a”登录,然后运行“ls”。你知道吗

ssh -la host ls

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

ssh host ls -la

argparse将这些视为相同的。有没有一种惯用的方法告诉argparse可选参数必须在位置参数之前?你知道吗


Tags: 文件方法脚本host客户端参数方式二进制
2条回答

使用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)

我认为您试图完成的任务非常符合argparse子命令的概念。看看:https://docs.python.org/3/library/argparse.html#sub-commands

相关问题 更多 >