2017-06-09 15 views
0

docoptモジュールをPythonで使用して、スクリプトのコマンドライン引数を解析しようとしています。このスクリプトは直接呼び出すこともできますし、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'} 
に示すモンキーパッチができたので、実際に使用方法のメッセージを示したものですが
関連する問題