2017-01-03 6 views
1

私はコマンドラインから実行するPythonスクリプトを持っています。 sys.argvを使用するスクリプトは、次の6つの(6)の引数が必要です:Pythonスクリプトでユーザーに必要な引数を表示する方法は?

argument 1: the script name (e.g. 'TimeSeries.py') 
argument 2: a configuration file (e.g. 'Customer1.cfg') 
argument 3: whether the resulting data is daily granular or hourly granular (e.g. -d or -h) 
argument 4: which data to retrieve (e.g. -all or -limited) 
argument 5: the number of days in the time series (e.g. '30') 
argument 6: the 'as of' date 

私は一日に複数回、このスクリプトを実行するため、引数の順序を覚えています。

しかし、スクリプトを頻繁に実行せず、必要な引数(および/またはシーケンス)を知らない人もいます。

(各引数の例とともに)引数リストを照会する方法はありますか?多分ドキュメントの文字列ですか?

ありがとうございます!

+6

はい、[ 'argparse'(https://docs.python.org/3/library/argparse.html)モジュールを使用します。 – Kasramvd

+0

または['click'](http://click.pocoo.org/5/)を試してみてください。どちらの方法でも、引数が渡されなければスクリプトは文句を言うでしょうし、ユーザが './script --help'をしたときには自己文書化することができます。 – wildwilhelm

+0

オプションでない場合は、 ' - 'をその前に置いてください。したがって引数4は「すべて」または「限定」になります。オプションの形でそれを期待することは、オプション(a1)の意味と矛盾する。 – BlackJack

答えて

1

は、複数のオプションをあります:

  • Click Pythonライブラリを使用し、これを使用してスクリプトを再フォーマットします。これにより、使用できる
    --helpの機能が自動的に作成されます。私は個人的にこれを使用していません。

  • 標準ライブラリのargparseを使用してください。たとえば:

import argparse 


def get_parser(): 
    parser = argparse.ArgumentParser(description='Description of your script') 
    parser.add_argument('name', help='The script name (e.g. "TimeSeries.py")', 
         metavar="NAME", type=str) 
    # other arguments here ... 
    return parser 

if __name__ == '__main__': 
    parser = get_parser() 
    args = parser.parse_args() 

これは、引数ごとにヘルプテキストで使用する-hオプションを生成します。最後の提案と組み合わせることができます:

  • 説明のついてファイルの先頭に「docstring」を追加します。引数が与えられていない場合は、__doc__を印刷してください。再びargparseで例:今-hオプションを使用してスクリプトを呼び出す
""" 
argument 1: the script name (e.g. 'TimeSeries.py') 
argument 2: a configuration file (e.g. 'Customer1.cfg') 
argument 3: whether the resulting data is daily granular or hourly granular (e.g. -d or -h) 
argument 4: which data to retrieve (e.g. -all or -limited) 
argument 5: the number of days in the time series (e.g. '30') 
argument 6: the 'as of' date 
""" 
import argparse 

... # rest of script 

def get_parser(): 
    parser = argparse.ArgumentParser(description=__doc__) 
    parser.add_argument('name', help='The script name (e.g. "TimeSeries.py")', 
         metavar="NAME", type=str) 
    # other arguments here ... 
    return parser 

if __name__ == '__main__': 
    parser = get_parser() 
    args = parser.parse_args() 

は、引数のヘルプテキストの残りの部分と、上部のドキュメンテーション文字列を出力します。これは、単純なifに勿論実現することができる。

if not args: # somewhere in your own code 
    print(__doc__) 
    # exit code(?) 
関連する問題