2017-11-05 11 views
1

私のスクリプトに引数を渡そうとしていますが、何らかの理由で-tを指定した場合は、スクリプトに空の文字列として表示されます。 --timeと指定すると、正しい値が得られます。どうして?コマンドライン引数が空の文字列として表示されます

import sys, getopt, time 


def main(argv): 
    inputfile = '' 
    outputfile = '' 
    sleeptime = 6 

    if len(sys.argv) == 1: 
     print("No arguments supplied") 
     print('Usage: test.py -i <inputfile> -o <outputfile> -t <1-24>') 
     sys.exit() 

    try: 
     opts, arg = getopt.getopt(argv, "i:o:t", ["ifile=", "ofile=", "time="]) 
    except getopt.GetoptError: 
     print('Incorrect options.') 
     print('Usage: test.py -i <inputfile> -o <outputfile> -t <1-24>') 
     sys.exit() 

    for opt, arg in opts: 
     if opt in ("-i", "--ifile"): 
      inputfile = arg 
     elif opt in ("-o", "--ofile"): 
      outputfile = arg 
     elif opt in ("-t", "--time"): 
      print("time = ", arg) 
      sleeptime = int(arg) 
     else: 
      print("Unknown arg") 
      sys.exit() 

    print(sleeptime) 

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

私はかなりここからコードをリッピング:https://www.tutorialspoint.com/python/python_command_line_arguments.htm

+7

['argparse'](https://docs.python.org/3/library/argparse.html)を使用しないのはなぜですか?それは文字通り[getoptのドキュメント](https://docs.python.org/3/library/getopt.html)が示唆しているものです。 – jonrsharpe

+0

私は提案を感謝しますが、これは私の質問に答えることはありません。 – shaboinkin

+2

...私は答えとして投稿しませんでした。 – jonrsharpe

答えて

3

をあなたの質問に答えるために(t引数を必要とするため)、私はあなたがtオプションの末尾にコロンを忘れてしまったと思いますが、"i:o:t:"にそれを変更してみてください、https://docs.python.org/3/library/getopt.html#getopt.getoptを参照してください。

全体のラインは次のようになります。一般的には

opts, arg = getopt.getopt(argv, "i:o:t:", ["ifile=", "ofile=", "time="]) 

を私も上記のコメントに同意、私は:)を解析するコマンドライン引数のhttps://docs.python.org/3/library/argparse.htmlを使用することをお勧めします。 docs

2

shortoptsあなたはコロンを逃した

コロンの引数を必要とするオプションで、スクリプトが認識したいオプション文字の文字列です。 tにあります。このように変更して動作します:

opts, arg = getopt.getopt(argv, "i:o:t:", ["ifile=", "ofile=", "time="]) 
関連する問題