Python でのさまざまなオプションと引数の解析の選択のメリットに関する関連する議論については、こちらを参照してください。
私は Python の の出力できちんとしたことを行う diff スクリプトを作成していますdifflib
。その一部は、それを呼び出すことができるさまざまな方法を処理することです。たとえば、Git は 7 つの引数 (2 番目と 5 番目は diff したいファイル) を設定した diff プログラムに送ります。興味深いことに、git のdifftool
フラグ--extcmd=
は、指定した 2 つの引数だけで異なるものを呼び出します。
したがって、これを行うために OptionParser を使用するのは非常に簡単です。これは、引数のリストを提供するだけで、2 番目と 5 番目の引数を取得して に送信できるからfileinput
です。
pydoc に非推奨であるという大きなバナーがあることに気付いたので、 を調べていましたargparse
。
argparse
「開始」オプションなしで、プログラムが一連の位置引数を受け入れるように構成することさえ可能かどうかは、私にはまったくわかりませんでした。Git が異なるメソッドを呼び出すなどの方法を変更できないため、これが必要でした。
とにかく、私は の非常に些細な操作をsys.argv
行うことになりました。これは、結局のところ、この特定の状況で最初に行うべきことでした。
if len(sys.argv) == 8:
# assume this was passed to git; we can of course do
# some parsing to check if we got valid git style args
args = [sys.argv[2], sys.argv[5]]
elif len(sys.argv) == 3:
args = sys.argv[:1]
else:
sys.exit("Not a valid number of args (2 or 7) to this diff program")
print "Files: " + ' '.join(args)
argparse を使用して、単にすべての引数を開いて読み取ろうとするプログラムを実装するにはどうすればよいでしょうか?
その理由は、forargparse
を非推奨parseopt
にするには、そのすべての機能を (妥当な範囲内で) 複製できる必要があるからです。