我希望我的脚本接受命令行参数,例如" 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'}
非常感谢。抱歉我的英语:)
答案 0 :(得分:2)
你并不是唯一一个梦想有这种功能的人,请参阅docopt问题#190 Repeating positional arguments followed by a single positional argument
重复位置参数后的选项会使解析变得模糊。想象一个文件,与命令选项具有相同的名称 - 如何指定它以及您期望得到什么结果?
我将假设您希望将目标目录放在最后,以使其对用户更直观。
Usage:
cp.py (-s <source>)... -t <directory>
这允许一个目标目录和多个源。
Usage:
cp.py <directory> <source>...
这打破了目标作为最后一个的偏好,但很容易。
docopt
目前不支持cp
正在使用的样式。一个原因是它不容易,另一个原因cp
有时过于复杂甚至含糊不清。docopt
允许多个位置参数后跟固定的位置参数集,那将是很好的,但目前尚未实现。