2017-06-09 56 views
0

我試圖在Python中使用docopt模塊來解析腳本的命令行參數。這個腳本可以直接調用,也可以通過PyInstaller構建的.exe文件來調用。我想用在使用部分程序的基礎上,程序是如何被調用這是不同的實際名稱(請注意,有很多更多的互斥選擇這裏,我已經省略掉掉):如何在Python docopt中使用實際的程序調用?

> py script.py 
    Usage: 
     script.py -foo <foo> 
     script.py -bar <bar> 
     ... 

> dist/script.exe 
    Usage: 
     dist/script.exe -foo <foo> 
     dist/script.exe -bar <bar> 
     ... 

我可以傳遞給docopt字符串使用.format()做到這一點,但是這得醜陋,並防止指定的選項模塊文檔字符串:

doc = """ 
    Usage: 
     {} -foo <foo> 
     {} -bar <bar> 
     ... 
    """.format(sys.argv[0], sys.argv[0]) 
args = docopt(doc, ...) 

有沒有更好的辦法?

回答

0

正如您在當前master分支中從inspecting the code可以看到的那樣,沒有太多的docopt來獲取它解析和顯示的字符串。

然而DocoptExit exception it raises是實際顯示用法消息,所以你能說如圖test.py下面

""" Usage: 
    PROGRAM --foo <foo> 
    PROGRAM --bar <bar> 
""" 
import sys, docopt 

class MyExit(SystemExit): 
    usage = '' 
    def __init__(self, message=''): 
     usage = self.usage.replace("PROGRAM",sys.argv[0]) 
     SystemExit.__init__(self, (message + '\n' + usage).strip()) 

docopt.DocoptExit = MyExit 
args = docopt.docopt(__doc__, version='0.0.1-alpha') 
print str(args) 

採樣運行

bash-3.2$ python test.py 
Usage: 
    test.py --foo <foo> 
    test.py --bar <bar> 

bash-3.2$ python test.py --foo foo 
{'--bar': False, 
'--foo': True, 
'<bar>': None, 
'<foo>': 'foo'} 
猴補丁
相關問題