[解決済み】コマンドライン引数をパースする最良の方法は何ですか?[クローズド]
質問
は何ですか? 最も簡単 , 最も遅い そして最も フレキシブル 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を多用しています。 数行で簡単に説明できるものではありませんが、お気軽にどうぞ。 私のレポジトリをブラウズする はメインクラス、そして それを使用するクラスとオプションパーサー
関連
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] macOSアップデート後、Gitが動作しない(xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] コマンドライン引数の読み方・処理方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] コマンドライン引数の読み方・処理方法は?
-
[解決済み】なぜoptparseではなくargparseを使用するのですか?