以前の回答では、ユーザーの知識について多くの仮定が行われていたことに注意したいと思います。この回答は、よりチュートリアルレベルで質問に回答しようとします。
Pythonを呼び出すたびsys.argvに、コマンドラインで引数を(スペースで区切って)表す文字列のリストが自動的に表示されます。この名前は、argvとargcがコマンドライン引数を表すCプログラミング規則に由来しています。
Pythonに慣れてきたら、リストと文字列についてもっと学びたいと思うでしょうが、それまでの間、いくつか知っておくべきことがここにあります。
引数が表されているとおりに引数を出力するスクリプトを作成するだけです。lenリストの関数を使用して、引数の数も出力します。
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
スクリプトにはPython 2.6以降が必要です。このスクリプトprint_args.pyを呼び出す場合は、さまざまな引数を指定してスクリプトを呼び出し、何が起こるかを確認できます。
> python print_args.py
['print_args.py'] 1
> python print_args.py foo and bar
['print_args.py', 'foo', 'and', 'bar'] 4
> python print_args.py "foo and bar"
['print_args.py', 'foo and bar'] 2
> python print_args.py "foo and bar" and baz
['print_args.py', 'foo and bar', 'and', 'baz'] 4
ご覧のとおり、コマンドライン引数にはスクリプト名が含まれていますが、インタープリター名は含まれていません。この意味で、Pythonはスクリプトを実行可能ファイルとして扱います。実行可能ファイル(この場合はPython)の名前を知る必要がある場合は、を使用できますsys.executable。
例からわかるように、ユーザーが引用符でカプセル化された引数を使用してスクリプトを呼び出した場合、スペースを含む引数を受け取ることができるため、ユーザーが指定した引数のリストが得られます。
これで、Pythonコードで、この文字列のリストをプログラムへの入力として使用できます。リストにはゼロベースの整数でインデックスが付けられているため、list [0]構文を使用して個々のアイテムを取得できます。たとえば、スクリプト名を取得するには:
script_name = sys.argv[0] # this will always work.
おもしろいですが、スクリプト名を知っている必要はほとんどありません。ファイル名のスクリプトの後に最初の引数を取得するには、次のようにします。
filename = sys.argv[1]
これは非常に一般的な使用法ですが、引数が指定されていない場合はIndexErrorで失敗することに注意してください。
また、Pythonではリストのスライスを参照できるため、ユーザーが指定した引数のみの別のリストを取得するには(ただし、スクリプト名はなし)、次のようにします。
user_args = sys.argv[1:] # get everything after the script name
さらに、Pythonでは、一連の項目(リストを含む)を変数名に割り当てることができます。したがって、ユーザーが常に2つの引数を提供することを期待する場合は、それらの引数を(文字列として)2つの変数に割り当てることができます。
user_args = sys.argv[1:]
fun, games = user_args # len(user_args) had better be 2
したがって、特定の質問に答えるために、は、問題のスクリプトに提供さsys.argv[1]れた最初のコマンドライン引数を(としてstring)表します。入力のプロンプトは表示されませんが、スクリプト名に続くコマンドラインで引数が指定されていない場合、IndexErrorで失敗します。