0

我正在使用docopt和 python 2.7。我想--在 vim 中实现类似的东西。来自man vim

--      Denotes the end of the options. Arguments after this will be handled as a file 
        name. This can be used to edit a filename that starts with a '-'.

'--'值得庆幸的是,docopt 已经实现了这一点,但它在我的参数列表中给了我一个额外的东西。例如,以这个简短的 python 脚本为例:

"""Usage:
  doc.py FILE [ARGUMENTS ... ]
  doc.py FILE [options] [ARGUMENTS ... ]
Options:
  -h --help     Show this screen.
  -d            Debug mode.
  -f FILE       Open FILE
  -w FILE       Log to FILE
  --safe        Do not allow shell access
"""

from docopt import docopt

def main():
    print(args["ARGUMENTS"])

if __name__ == "__main__":
    args = docopt(__doc__, version="V alpha 0.1")
    main()

如果我用

python doc.py file.txt -- 1 2 3 -w

我明白了:

['--', '1', '2', '3', '-w']

我希望它能给:

['1', '2', '3', '-w']

我究竟做错了什么?

4

2 回答 2

0

我不是专家,但请尝试将--所有用途设为可选。

doc.py FILE [options] [--] [ARGUMENTS ... ]

您可以输入选项,也可以不输入并从参数开始。--如果存在,它将寻找第一个。

让我知道这个是否奏效。

于 2016-05-29T03:44:57.583 回答
0

我已经尝试过 Wahlstrom 的解决方案,但这是行不通的。
据我所知,docopt 会将所有内容解析为参数列表,
docopt 中没有语法或特殊用法供您使用。

目前最好的解决方案是在进一步的程序流程之前清除那个“--”元素。
或者只是简单地添加一个 if 案例来处理它。

于 2018-09-20T06:43:34.870 回答