参数错误处理docopt python

时间:2014-09-06 00:21:19

标签: python

我试图找出如何打印使用信息,如果我的脚本没有被解析任何参数。我试图用docopt实现这一目标。下面是我的代码,它按预期工作,但我不能解决我需要添加什么来打印用法如果没有解析参数或不正确的参数。 (空白论点等)任何帮助将不胜感激。

#!/usr/bin/python

"""
Description:

Compare 2 lists and print the common values.

Usage: Checker.py
  Checker.py [(-a <list1>) (-g <list2>)]
  Checker.py -h | --help
  Checker.py --version


Options:
   -a --list1         List1
   -g --list2         List2
   -h --help          Show this screen.
   --version          Show version.
"""

def getlist1(one):
    first_list = open(one).readlines()
    return [s.replace('\n', '') for s in first_list]

def getlist2(two):
    second_list = open(two).readlines()
    return [s.replace('\n', '') for s in second_list]

def checklist(list1, list2):
    return list(set(one_set) & set(two_set))    


if __name__ == "__main__":
    from docopt import docopt
    arguments = docopt(__doc__, version= '1')

    list_one = getlist1(arguments['<list1>'])
    list_two = getlist2(arguments['<list2>'])   
    found_items = checklist(list1, list2)
    found_items.sort()
    for item in found_items:
        print item              

2 个答案:

答案 0 :(得分:2)

我不确定这完全回答了你的问题,但我希望这会有所帮助。

如果您在没有任何参数的情况下运行脚本,arguments['<list1>']arguments['<list2>']都会评估为None。所以:

# ...

if __name__ == "__main__":
    from docopt import docopt
    arguments = docopt(__doc__, version= '1')

    if arguments['<list1>'] == None or arguments['<list2>'] == None:
        print __doc__
        exit(0)

    list_one = getlist1(arguments['<list1>'])
    list_two = getlist2(arguments['<list2>'])   
    found_items = checklist(list1, list2)
    found_items.sort()
    for item in found_items:
        print item    

答案 1 :(得分:0)

您允许Checker.py(不带任何参数)作为使用模式。另外,带有方括号的(-a <list1>) (-g <list2>)可以省略它们。

Description:

Compare 2 lists and print the common values.

Usage:
  Checker.py (-a <list1>) (-g <list2>)
  Checker.py -h | --help
  Checker.py --version


Options:
   -a --list1         List1
   -g --list2         List2
   -h --help          Show this screen.
   --version          Show version.

向下滚动到documentation中的(required elements)以查看的情况,如果有一个元素,则需要另一个元素

  

另一个用例,就是当你需要指定一个元素时   现在,然后需要另一个,你可以实现:

Usage: my_program [(<one-argument> <another-argument>)]
     

在这种情况下,   有效的程序调用可以是无参数,也可以是   2个论点。