2016-08-31 4 views
0

私のコマンドラインスクリプトは、文字列、int型、山車やリストなど、いくつかの引数を取り、そしてそれはすべての引数で呼び出しを行うには少しトリッキーになってきている。複数の引数をスクリプトに渡すより効果的な方法は?

python myscript.py arg1 arg2 arg3 ... argN 

コマンド内のすべての引数を記述する必要がないようにするには私はすべての引数を持つテキストファイルを作成しました。これは引数を収集するために単純に行単位で読み込みます。これはうまくいきますが、これを実行するためのベストプラクティスですか?より効果的な方法はありますか?

+1

'それはあなたがファイル内のコマンドライン引数を入れて、パラメータの数が手に負えなく取得するために起動したときに便利ですそこから読み取ることができますようにargparse'はかなり素晴らしいです...しかし、あなたが持っている場合変更したいものがたくさんありますが、構造化された初期化ファイル(例えば 'configparser')を使用するほうが良いでしょう。 – mgilson

+1

本当に使い方に依存します。ユーザーが毎回これらのパラメータを入力する必要がある場合、ファイルのエラーが起こりにくくなる可能性があります。 パラメータが頻繁に変更されない場合は、環境変数を使用することもできますが、それは面倒かもしれませんので、推奨しません。 'stdin'から読み込み、値をパイプするか、ここにあるドキュメント(埋め込みデータを渡すためのシェルデバイス)を使います。プログラムがどのように呼び出されているかを、コマンドラインやスクリプトから明確にすることはできますか? – cdarke

+0

@cdarkeこれで、私の引数を含むテキストファイルを使って 'python myscript.py input_args.txt'でプログラムを呼び出しました。 – LukeBowl

答えて

1

を私のために私は、Pythonのgetoptのは、進むべき道だと思います。

#!/usr/bin/python 

import sys, getopt 

def main(argv): 
    inputfile = '' 
    outputfile = '' 
    try: 
     opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="]) 
    except getopt.GetoptError: 
     print 'test.py -i <inputfile> -o <outputfile>' 
     sys.exit(2) 
    for opt, arg in opts: 
     if opt == '-h': 
     print 'test.py -i <inputfile> -o <outputfile>' 
     sys.exit() 
     elif opt in ("-i", "--ifile"): 
     inputfile = arg 
     elif opt in ("-o", "--ofile"): 
     outputfile = arg 
    print 'Input file is "', inputfile 
    print 'Output file is "', outputfile 

if __name__ == "__main__": 
    main(sys.argv[1:]) 

使用法:

usage: test.py -i <inputfile> -o <outputfile> 

それはあなたが引数の名前を持っているときに実行する方が簡単です。

参考:http://www.tutorialspoint.com/python/python_command_line_arguments.htm

関連する問題