getoptを使用してコマンドライン引数を解析しようとしています。 1つの引数を正常に解析します。複数の引数を渡そうとすると、最初のフラグが使用され、その他の引数はすべてargsに残ります。また、引数リストの後にコロンを付けて引数を渡さないと、例外が発生しません。python getoptが期待通りにフラグを処理していません
私が持っている:
def main(argv):
try:
opts, args = getopt.getopt(argv,"ns:i:",["num_ratios", "sample=", "iteration="])
except getopt.GetoptError:
print ('test.py -s <sampleName -i <iteration>')
sys.exit(2)
print (opts)
print (args)
for opt, arg in opts:
if opt == '-n':
n = arg
elif opt == '-s':
sampleName=arg
elif opt == '-i':
iteration = arg
if __name__ == "__main__":
main(sys.argv[1:])
を私はその後、実行した場合:
python calculateRatios.py -n 1 -s wibble
私はそれがオプションとして-n拾ったがいないことを私に言って
[('-n', '')]
['1', '-s', 'wibble']
を取得値1を関連付けると停止します。値を割り当てないので、それ以上のフラグを見つけることはできません。
python calculateRatios.py -n 1
私の理解は、私ははgetopt.getopt呼び出し中のSの後にコロンを持っているように例外がキックオフということです。私はその後、実行
。それは、代わりに私はこれらの例の両方で
[('-n', '')]
['1']
を取得し、それから来るのどこ私は知らないことをオプトインで空の文字列は、ありますしません。それは問題ですか?それはどこから来たの?私はそれが私が逃した小さなものだと思っています。 I
しかし、私はnが必要なオプションであるとは考えていませんでした。私が従ってきた例(例えば、http://www.diveintopython.net/scripts_and_streams/command_line_arguments.html)は、必須ではないオプションの後にコロンを必要としないことを示唆しています。また、-sオプションが指定されていないときに発火しない例外は修正されません。何が起こっているのでしょうか? – Ben
'getopt'で必要なオプションがあったのはどこですか? ':'オプションは引数を必要とします。このオプションは、引数が_and_がコマンドラインの最後のものを逃した場合にのみ失敗します。必須/オプションの場合は、optparserに切り替えることをお勧めします。 –
引数が必要なオプションは、必須の引数です。または私は間違ってそれを読んでいますか? – Ben