2011-07-03 16 views
3

私はPythonでgetoptモジュールを使ってコマンドラインオプションと引数を取得するためのコードを書こうとしています。ここ は私のコードです:getoptを使ったコマンドラインオプションと引数

import getopt 
import sys 

def usage(): 
    print('Usage') 

def main(): 
    try: 
     opts, args = getopt.getopt(sys.argv[1:], 'xy:') 
    except getopt.GetoptError as err: 
     print(err) 
     usage() 
     sys.exit() 

    for o,a in opts: 
     if o in ("-x", "--xxx"): 
      print(a) 
     elif o in ("-y", "--yyy"): 
      print(a) 
     else: 
      usage() 
      sys.exit() 

if __name__ == "__main__": 
    main() 

問題は、私はオプションxの引数を読み取ることができないということですが、私はyの引数を読むことができます。これを解決するにはどうすればよいですか?

+3

構文がより使いやすいので、http://docs.python.org/library/argparse.html#module-argparseをご覧ください。 –

+1

http://docs.python.org/library/argparse.html#module-argparse –

+0

には、通常のgetoptのdouble colon ::がオプションの引数を許可するために使用されていることに注意する価値があります。 '--help :: 'は' --help'を許可するが、 '--help 'を探していない限り処理されないという事実のため、初心者には動作するように表示される: '彼らは私が怒っている文書ではこれがサポートされていないことに言及していません。この場合、perlはpythonよりもgetoptの 'ストック'モジュールを取得するからです...もちろんoptparseとargparseを持っていますコロンがない/機能がわかりません!) – osirisgothra

答えて

10

getopt.getopt(sys.argv[1:], 'x:y:')

http://docs.python.org/library/getopt.html

を試してみてはコマンドラインオプションと パラメータリストを解析します。引数は実行中のプログラムへの参照である の先頭にはなく、引数 の解析対象です。 通常、これはsys.argv [1:]を意味します。 オプションは、スクリプトがコロン 引数を必要とするオプションで、認識 したいオプション 文字の文字列です(「:」; すなわち、Unixの のgetopt()が使用するのと同じ形式)。

+1

ありがとう、それは動作します。 –

関連する問題