Pythonスクリプトで引数の条件を書く方法を教えてもらえますか?次のような2番目のコマンドライン引数を使用して実行した場合は、「Argument2Entered」を出力したいと思います。
python script.py argument1 argument2
そして、次のようにコマンドライン引数なしで実行された場合は、「Nosecondargument」を出力します。
python script.py argument1
これは可能ですか?
Pythonスクリプトで引数の条件を書く方法を教えてもらえますか?次のような2番目のコマンドライン引数を使用して実行した場合は、「Argument2Entered」を出力したいと思います。
python script.py argument1 argument2
そして、次のようにコマンドライン引数なしで実行された場合は、「Nosecondargument」を出力します。
python script.py argument1
これは可能ですか?
import sys
if len(sys.argv)==2: # first entry in sys.argv is script itself...
print "No second argument"
elif len(sys.argv)==3:
print "Second argument"
これには、正確に何をしたいのか、どれだけの柔軟性が必要になるのかによって、多くの答えがあります。
sys.argv
最も簡単な解決策は、すべてのコマンドライン引数を含むリストである変数を調べることです。(最初の要素としてスクリプトの名前も含まれています。)これを行うには、len(sys.argv)
その値に基づいて動作を確認し、変更するだけです。
ただし、これは多くの場合、コマンドラインプログラムに期待されることに対して十分な柔軟性がありません。たとえば、フラグ(、、 ...)が必要な場合、-i
。だけでフラグ--no-defaults
を作成する方法は明らかではありませんsys.argv
。引数(--dest-dir="downloads"
)についても同様です。したがって、この種の引数の構文解析を単純化するために人々が書いた多くのモジュールがあります。
組み込みのソリューションはですargparse
。これは強力で非常に使いやすいですが、特に簡潔ではありません。
賢い解決策はplac
、main
関数のシグネチャを調べて、コマンドライン引数がどうあるべきかを推測しようとすることです。
これは、これをどこに行くかに応じて、他の多くの投稿に関連しているので、ここに4つ入れます。
Pythonスクリプトに渡されたコマンドライン引数を取得/解析するための最良の方法は何ですか?
「[command][action][parameter]」スタイルのコマンドラインインターフェイスを実装しますか?
Pythonでコマンドライン引数を処理するにはどうすればよいですか?
Pythonのoptparseを使用して位置引数ヘルプをフォーマットするにはどうすればよいですか?
しかし、Pythonドキュメントからのあなたの質問への直接の答え:
sys.argv -Pythonスクリプトに渡されるコマンドライン引数のリスト。argv [0]はスクリプト名です(これがフルパス名であるかどうかはオペレーティングシステムによって異なります)。インタプリタに対して-cコマンドラインオプションを使用してコマンドが実行された場合、argv[0]は文字列'-c'に設定されます。スクリプト名がPythonインタープリターに渡されなかった場合、argv[0]は空の文字列です。標準入力、またはコマンドラインで指定されたファイルのリストをループするには、fileinputモジュールを参照してください。
次のブロックは自明である必要があります
$ ./first.py second third 4th 5th
5
$ cat first.py
#!/usr/bin/env python
import sys
print (len(sys.argv))
Pythonでこの単純なことを行う方法はたくさんあります。私がもっと知りたいのであれば、この記事を読むことをお勧めします。ところで、私はあなたに以下の1つの解決策を与えています:
import click
'''
Prerequisite: # python -m pip install click
run: python main.py ttt yyy
'''
@click.command(context_settings=dict(ignore_unknown_options=True))
@click.argument("argument1")
@click.argument("argument2")
def main(argument1, argument2):
print(f"argument1={argument1} and argument2={argument2}")
if __name__ == '__main__':
main()