多个命令行参数

时间:2015-09-04 17:40:35

标签: python command-line command-line-arguments

我一直在研究一点Python,我遇到了getopt模块,用于解析命令行参数。

基本上,我有以下代码:

import sys, getopt

print("The list of %s arguments passed:" % len(sys.argv))

# Print each argument
for arg in sys.argv:
    print(arg)
print()

# Now print parsed arguments
opts, args = getopt.getopt(sys.argv[1:], "ab:cd", ["arbitrary", "balance=", "cite"])
for opt in opts:
    print(opt)
print()

# Print the arguments returned
print(args)

但是,我需要-b选项来获取两个不同的参数,例如-b one two。我已经尝试在b的参数列表中getopt之后放置两个冒号,但它不起作用。

如果有人可以使用getopt模块告诉我如何执行此操作并发布示例,那将非常有用!

1 个答案:

答案 0 :(得分:1)

忘记getopt,使用 Docopt (真的):

如果我理解得很好,你希望用户传递2个参数来平衡。这可以通过以下方式实现:

doc = """Usage:
   test.py balance= <b1> <b2>
   test.py
"""

from docopt import docopt

options, arguments = docopt(__doc__)  # parse arguments based on docstring above

此程序接受:test.py balance= X Y或无参数。

现在,如果我们添加'引用'和'任意'选项,这应该给我们:

doc = """
Usage:
   test.py balance= <b1> <b2>
   test.py

Options:
   --cite -c           Cite option 
   --arbitrary -a      Arbitrary option   
"""

该程序现在接受选项。 示例:

test.py balance= 3 4 --cite

=> options = {
    "--arbitrary": false, 
    "--cite": true, 
    "<b1>": "3", 
    "<b2>": "4", 
    "balance=": true
}

提示:此外,您可以在代码中使用它之前test your documentation string directly in your browser

救生员!