【发布时间】:2011-09-23 05:50:43
【问题描述】:
我正在为ssh 命令行客户端编写一个包装器。在属于command 的第一个位置参数之后,所有其他选项也应视为位置参数。
在optparse下,我相信这会用disable_interspersed_args来完成。
目前我有这样的事情:
parser = argparse.ArgumentParser()
parser.add_argument('--parallel', default=False, action='store_true')
# maybe allow no command? this would ssh interactively into each machine...
parser.add_argument('command', nargs='+')
args = parser.parse_args()
但如果选项作为命令的一部分传递(例如 my_wrapper ls -l),它们会被 ArgumentParser 解释为未知选项。 error: unrecognized arguments: -l
如果我使用parse_known_args(),选项可能会乱序。
p = argparse.ArgumentParser()
p.add_argument('-a', action='store_true')
p.add_argument('command', nargs='+')
print(p.parse_known_args())
$ python3 bah.py -b ls -l -a
(Namespace(a=True, command=['ls']), ['-b', '-l'])
在这里你可以看到-b在ls之前的位置已经丢失,并且-a已经从命令中解析出来,这是不希望的。
我该怎么做:
- 防止参数在某个点之后被解析?
- 禁止解析散在的参数?
- 是否允许将带前缀的参数用作位置参数?
【问题讨论】: