引数なしのPython argparseコマンドラインフラグ


345

コマンドライン引数にオプションのフラグを追加するにはどうすればよいですか?

例えば。だから私は書くことができます

python myprog.py 

または

python myprog.py -w

私は試した

parser.add_argument('-w')

しかし、私はただエラーメッセージを受け取ります

Usage [-w W]
error: argument -w: expected one argument

これは、-wオプションの引数値が必要であることを意味します。フラグを受け入れるだけの方法は何ですか?

私はこの質問でhttp://docs.python.org/library/argparse.htmlかなり不透明になっています。


4
スクリプトにフラグを1つだけ付けたい場合は、sys.argvの方がずっと簡単です。特にargparseを学習しようとしない限り、これは知っておくと便利なモジュールであるため、良い方法です。
chown

2
答えを知った今でも、ドキュメントからどのように理解できたかわかりません。
Andreas Haferburg

回答:


531

ご存知のように、引数wはコマンドラインで-wの後に値を期待しています。変数を設定してスイッチを切り替えるだけの場合TrueまたはをFalsehttp: //docs.python.org/dev/library/argparse.html#action(具体的にはstore_trueおよびstore_false)を確認してください。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-w', action='store_true')

action='store_true'意味しdefault=Falseます。

逆に、あなたが持っている可能性がaction='store_false'示唆しています、default=Trueます。


3
@Jdog、なぜこれが私にとってうまくいかないのですか?w常にありますFalse
Iulian Onofrei 2015

52

クイックスニペットを追加して実行する準備をします。

ソース:myparser.py

import argparse
parser = argparse.ArgumentParser(description="Flip a switch by setting a flag")
parser.add_argument('-w', action='store_true')

args = parser.parse_args()
print args.w

使用法:

python myparser.py -w
>> True

-10

簡単な方法sysは次のとおりです。ただし、機能は制限されていますが、それ以外は必要ありません。

flag = "--flag" in sys.argv[1:]

[1:] 完全なファイル名が --flag


13
単にログインして、長期的に見てこれがどれほど悪い考えであるかを表すだけです。文字列 "--flag"がsys.argvにあるかどうかを確認することから始めると想像してください。次に、sys.argv [-1]の最後を見て、開くファイルを確認します。突然--flag、と名付けられたファイルを開こうとすると、予期しない動作が発生し、さらに悪いことに、これは信頼できないデータが最終的にセキュリティ上の欠陥になることが多いということですargvに渡されます。結局、このメソッドは実行されるべきではありません。実際の引数パーサーは、はるかに堅牢です...
timthelion

3
既に述べたように、このソリューションは堅牢ではありませんが、これを非常に迅速に行う必要がある場合(たとえば、テスト目的など)は機能します。絶対に本番コードから遠ざけてください。
Jonathan Sudiaman 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.