标签: docopt

为什么我的docopt选项没有默认值?

docopt在一个示例中使用我正在处理的模块,并且所有选项默认值都在工作,除了一个.我已经修改了包含和围绕该选项的所有代码,试图找出问题,但它不会采用默认值!

我的选项块看起来像这样:

Options:
  --help                       Show this message and exit
  --version                    Show version info and exit
  -w WIDTH --width=WIDTH       The out to out width of the deck (feet) [default: 73]
  -g GIRDERS --girders=GIRDERS The number of girders [default: 8]
  -h HEIGHT --height=HEIGHT    The height of the girders (inches) [default: 56]
  -t THICK --thick=THICK       The deck thickness (inches) [default: 8]
  -a ADIM --adim=ADIM          The "A" dimension, max deck thick @ CL girder [default: 12]
  -l LSLP --leftslope=LSLP     The left-hand deck …
Run Code Online (Sandbox Code Playgroud)

python docopt

20
推荐指数
1
解决办法
4420
查看次数

Python - docopt和argparse之间的区别

我必须编写一个命令行界面,我已经看到我可以使用docoptargparse.

我想知道两者之间的主要区别是什么,这样我才能做出明智的选择.

请坚持事实.我不想哇.docopt.如此美丽.很有用.

python command-line-arguments argparse docopt

20
推荐指数
3
解决办法
4476
查看次数

如何在docopt中多次指定一个可选参数

我想以一种方式设计我的命令行应用程序,让我们称之为注释,可以多次指定,例如,

$ ./my_app.py --comment="Comment 1" --comment="Comment 2"
Run Code Online (Sandbox Code Playgroud)

可以用docopt完成吗?我检查了docopt主页,但找不到对同一可选参数的多个出现的任何引用.

python docopt

9
推荐指数
1
解决办法
2758
查看次数

包含多个带docopt的参数列表

我正在使用我的python应用程序作为命令行工具,功能docopt库.使用该库实现命令很容易.但是,目前我无法找到完成以下要求的方法:

文档字符串是:

"""
aTXT tool

Usage:
  aTXT <source>... [--ext <ext>...]

Options:
    --ext       message

"""
Run Code Online (Sandbox Code Playgroud)

从shell,我想写这样的东西:

atxt a b c --ext e f g
Run Code Online (Sandbox Code Playgroud)

docopt输出的结果字典如下:

 {'--ext': True,
 '<ext>': [],
 '<source>': ['a', 'b', 'c', 'e', 'f']}
Run Code Online (Sandbox Code Playgroud)

但是,我需要具备以下条件:

 {'--ext': True,
 '<ext>': ['e', 'f', 'g'],
 '<source>': ['a', 'b', 'c']}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

python command-line-interface command-line-arguments docopt

8
推荐指数
1
解决办法
1822
查看次数

Docopt:重复元素之后的选项作为重复元素进行交织

我在我的简单Python程序中使用docopt:

#!/usr/bin/env python
"""
Farmers market

Usage:
  farmersmarket.py buy -i <item> -q <quantity> [<quantity>] [-p <price>] [-dvh]
  farmersmarket.py -d | --debug
  farmersmarket.py -v | --version
  farmersmarket.py -h | --help

Options:
  -i --item         Item.
  -q --quantity     Quantity.
  -p --price        Price.
  -d --debug        Show debug messages.
  -h --help         Show this screen.
  -v --version      Show version.
"""

from docopt import docopt

print docopt(__doc__)
Run Code Online (Sandbox Code Playgroud)

如果我跑:

farmersmarket.py buy --item eggs --quantity 100 115 --price 0.25
Run Code Online (Sandbox Code Playgroud)

预期的行为是以0.25的价格在价值100和115之间购买随机数量的蛋.至少在解释参数时,这没有问题.换句话说,docopt可以按预期获得所有内容:

{'--debug': False,
 '--help': False,
 '--item': …
Run Code Online (Sandbox Code Playgroud)

python docopt

7
推荐指数
1
解决办法
1070
查看次数

如何防止命令行args仅被我的脚本解释为R?

我正在使用R 的docopt实现.我的脚本有一个命令行选项,其中包含短格式-g.当我运行我的脚本时,似乎这个参数首先由R解释,然后由我的脚本解释.因此,我得到一个关于不指定GUI值的手腕拍.我可以阻止R尝试使用这些命令行参数吗?

脚本示例:

#!/usr/bin/Rscript

suppressPackageStartupMessages(library(docopt))

"docopt practice script

Usage: foo.R [-g <goodies>]

Options:
     -g <goodies>, --goodies=<goodies>  Goodies
" -> doc

opts <- docopt(doc)
cat(sprintf("goodies = %s\n", opts$goodies))
Run Code Online (Sandbox Code Playgroud)

这是我运行时发生的事情:

Jennifers-MacBook-Pro-3:scripts jenny$ ./foo.R -g donuts
WARNING: --gui or -g without value ignored
goodies = donuts
Run Code Online (Sandbox Code Playgroud)

如果您更改选项的缩写形式-g,以-j中,WARNING消失了......但我有一个很好的理由使用字母g!

r docopt

7
推荐指数
1
解决办法
694
查看次数

为什么默认值没有出现在docopt的命令行参数字典中?

我一直在尝试使用docopt来创建一个简单的CLI,但由于某种原因,我的默认参数没有出现.下面是我的测试代码.我正在使用docopt.pygithub存储库的最新版本.

"""
Usage:  scrappy <path> ... [options]

-a --auto           Automatically scrape and rename without user interaction.
-l --lang           Specify language code [default: en].
--scan-individual   Evaluate series information individually for each file.
-c --cfg            User alternate config file [default: ../scrappy.conf]
-t --test           Test run.  Do not modify files.
-v --verbose        Print verbose output
"""

from docopt import docopt
arguments = docopt(__doc__, version='0.1.0 alpha')
print arguments  # DEBUG
Run Code Online (Sandbox Code Playgroud)

这是我跑步时的输出 $ scrappy/scrappy.py first_path_parameter second/path/parameter

{'--auto': None,
 '--cfg': None,
 '--lang': None,
 '--scan-individual': …
Run Code Online (Sandbox Code Playgroud)

python docopt

5
推荐指数
1
解决办法
3069
查看次数

docopt +模式验证

有没有更好的方法来处理此验证:

#!/usr/bin/env python
""" command.

Usage:
  command start ID
  command finish ID FILE
  command (-h | --help)
  command (-v | --version)

Arguments:
  FILE     input file
  PATH     out directory

Options:
  -h --help     Show this screen.
  -v --version  Show version.
"""

from docopt import docopt
from schema import Schema, Use, SchemaError

if __name__ == '__main__':
    args = docopt(__doc__, version='command alpha')

    # Remove False or None keys from args dict
    for k, v in args.items():
        if (not v):
            args.pop(k)

    if 'start' in args: …
Run Code Online (Sandbox Code Playgroud)

python validation schema parsing docopt

5
推荐指数
1
解决办法
2268
查看次数

带有 docopt 的两个参数的选项

我想要一个带有两个参数的选项。即希望能够使用

$ ./foo --path "old" "new"
Run Code Online (Sandbox Code Playgroud)

或者我真正想要的是:

$ ./foo --path "old" "new" --path "old" "new"
Run Code Online (Sandbox Code Playgroud)

但我不知道该怎么办?(事实上​​我担心这可能是不可能的......)


我不想要的,但很接近的

我知道如何有一个重复选项(见下文),但这实际上不是我想要的。

#!/usr/bin/env python3
'''foo

Usage:
  foo [--path ARG]...

Options:
  --path=ARG  Repeating option.
'''

import docopt

args = docopt.docopt(__doc__)

print(args)
Run Code Online (Sandbox Code Playgroud)

可以调用

$ ./foo --path "old" --path "new"
Run Code Online (Sandbox Code Playgroud)

python docopt

5
推荐指数
1
解决办法
1247
查看次数

选项多样性与docopt

我想docopt用于解析可以多次接收相同选项的命令行.有人可以解释一下怎么做吗?

一个测试例子:

#!/usr/bin/env python

"""
Test program.

Usage:
    test.py -v

Options:
    -v  Flag that should be counted
"""

import docopt
print docopt.docopt(__doc__)
Run Code Online (Sandbox Code Playgroud)

如果我用这个test.py -v,我得到:

{'-v': True}
Run Code Online (Sandbox Code Playgroud)

如果我运行它test.py -vv,它会显示用法消息(表示命令行无效).

我想调整选项文档,以便docopt返回给我:

{'-v': 1}
Run Code Online (Sandbox Code Playgroud)

当只有1 -v通过时:

{'-v': 3}
Run Code Online (Sandbox Code Playgroud)

比方说,如果用户通过了-vvv.这几乎与argparse中count操作功能相同.

python command-line argparse docopt

4
推荐指数
1
解决办法
2505
查看次数