1. ホーム
  2. パイソン

[解決済み】コマンドライン引数をパースする最良の方法は何ですか?[クローズド]

2022-03-30 21:47:43

質問

は何ですか? 最も簡単 , 最も遅い そして最も フレキシブル Pythonのコマンドライン引数を解析するためのメソッドやライブラリはありますか?

どのように解決するのですか?

この回答では optparse これは、古いバージョンのPythonに適しています。Python 2.7以上の場合。 argparse は次のように置き換わります。 optparse . 参照 本解答 をご覧ください。

getoptは標準のgetopt(3)Cライブラリ関数を一対一にマッピングしたようなもので、あまり使いやすいものではありませんが、他の方が指摘しているように、getoptよりもoptparseの方がよいでしょう。

optparseは少し冗長ですが、より良い構造で、後からの拡張も簡単です。

パーサーにオプションを追加する典型的な行は次のとおりです。

parser.add_option('-q', '--query',
            action="store", dest="query",
            help="query string", default="spam")

処理時にオプションとして -q または --query を受け付け、引数を query という属性に格納し、指定しない場合はデフォルト値を持つという、ほとんど自明なものです。 また、オプションと一緒に help 引数(-h/--help で実行したときに使用される)を宣言することで、セルフドキュメント化されています。

通常、引数を解析するのは

options, args = parser.parse_args()

これは、デフォルトでは、スクリプトに渡された標準引数 (sys.argv[1:]) をパースするものです。

options.queryには、スクリプトに渡した値が設定されます。

パーサーを作成するには、単純に

parser = optparse.OptionParser()

以上が基本的なことです。 これを示す完全なPythonスクリプトはこちらです。

import optparse

parser = optparse.OptionParser()

parser.add_option('-q', '--query',
    action="store", dest="query",
    help="query string", default="spam")

options, args = parser.parse_args()

print 'Query string:', options.query

基本を示す5行のpython。

これをsample.pyに保存して、一旦

python sample.py

と一度だけ

python sample.py --query myquery

それ以上に、optparseは非常に簡単に拡張できることがわかると思います。 私のプロジェクトの1つでは、コマンドツリーでサブコマンドを簡単にネストできるCommandクラスを作りました。 これはコマンドを連鎖させるためにoptparseを多用しています。 数行で簡単に説明できるものではありませんが、お気軽にどうぞ。 私のレポジトリをブラウズする はメインクラス、そして それを使用するクラスとオプションパーサー