我希望我的脚本像"cp"命令一样接受命令行参数:
'''
Usage:
cp.py <source>... <directory>
cp.py -t <directory> <source>...
cp.py -s <source>... -t <directory>
'''
那些命令行
$ python cp.py src/path/1 src/path/2 target/path
$ python cp.py -t target/path src/path/1 src/path/2
$ python cp.py -s src/path/1 src/path/2 -t target/path
将得到相同的结果:
{'<source>':['src/path/1', 'src/path/2'],'<directory>': 'target/path'}
非常感谢。很抱歉我的英语不好
目前不支持
你不是唯一一个梦想这样的特性的人,参见docopt issue #190重复位置参数后面跟着一个位置参数
重复参数后跟选项
的模糊性重复位置参数后的选项使解析有歧义。假设有一个文件,它的名称与命令选项相同——您将如何指定它,您希望得到什么结果?
建议的替代方案(更改命令行设计)
我假设,您更喜欢将目标目录放在最后,以便用户直观。
带有值的重复选项
Usage:
cp.py (-s <source>)... -t <directory>
允许一个目标目录和多个源目录。
将重复参数作为最后一个
Usage:
cp.py <directory> <source>...
这打破了目标作为最后一个的偏好,但是非常容易。
<标题>结论- 当前
docopt
目前不支持该样式,cp
正在使用。一个原因是不容易,另一个原因是cp
有时太复杂甚至模棱两可。 - 使用重复的参数后面跟着选项总是很棘手,尽量避免这种情况。
- 选项是可选的,所以使用选项,这是必需的,是矛盾的这一规则,便于使用命令行程序。
- 目前,我的偏好是使用目标参数作为第一个位置参数,然后是重复的源位置参数。
- 如果
docopt
允许多个位置参数后跟固定的位置参数集,那就太好了,但目前还没有实现。
遇到类似的需求,多年后再回顾这个问题,我发现被接受的回答所提到的问题仍然没有解决。
然而,我发现现在有一个替代库docpie,它实现了cli解析文档字符串的相同原理,但支持cp
语法。由于它与docopt极其相似(以及随后的相对兼容性),这里有一个明确的差异列表。