argv
一体何なんだ!?
編集:できれば、1行か2行書いて、それがどのように機能するかを説明してください。
この簡単なプログラムを試してください。program.py
import sys
print sys.argv
そして実行してみてください
python program.py
python program.py a b c
python program.py hello world
argv が何であるかに注意してください。
これは引数ベクトルを意味し、プログラムに渡される引数が含まれています。最初のものは常にプログラム名です。
たとえば、Python プログラムを次のように実行した場合...
$ python your_script.py --yes
...次に、あなたの意志にはandsys.argv
が含まれます。your_script.py
--yes
「より高いレベルのコードを学び始める」ために時間を無駄にする前に、このような情報を見つける方法を学ぶ必要があります。なじみのない関数/クラス/変数を検索する方法を知っていれば、SO の人々があなたに答えるのを 30 ~ 60 分待たずに (そして明らかにその過程で複数の反対票を集めることができます)、もう 1 つ追加するよりもはるかに便利になります。レパートリーに情報を追加します。
組み込みのヘルプから:
>>> import sys
>>> help(sys)
…
argv -- command line arguments; argv[0] is the script pathname if known
…
これはどのモジュールでも機能します。多くの場合、モジュール内の個々のクラスと関数には、より詳細な情報があります (ただし、argv は単なる ,list
であり、リストにはカスタム ヘルプがないため、これは機能しません)。
それが十分な情報でない場合、ドキュメント(または2.x ドキュメント) には次のように記載されています。
システム。argv
Python スクリプトに渡されるコマンド ライン引数のリスト。argv[0] はスクリプト名です (これがフル パス名であるかどうかは、オペレーティング システムによって異なります)。インタープリターに -c コマンド ライン オプションを使用してコマンドが実行された場合、argv[0] は文字列 '-c' に設定されます。スクリプト名が Python インタープリターに渡されなかった場合、argv[0] は空の文字列です。
標準入力、またはコマンドラインで指定されたファイルのリストをループするには、fileinput モジュールを参照してください。
「python argv」をグーグルで検索した場合の最初の Web 検索結果は、Python の作者 Guido によるブログ投稿であり、あなたには少し高度すぎるかもしれませんが、2 番目の検索結果は「コマンド ライン引数」のチュートリアルです。
これらのほとんどが示すように、多くの単純なスクリプトは直接fileinput
処理する代わりに を使用できますがargv
、より複雑なスクリプトは多くの場合argparse
( Python 2.6 以前で作業する必要がある場合はoptparse
、 、またはその他の代替手段) を使用する必要があります。getopt
が適切な例の 1 つsys.argv
は、相対パス名を絶対パス名に変換するこの簡単なプログラムです (Linux や、abspath、GNU readlink、または同様のツールが組み込まれている他のプラットフォームを使用していない人向け):
import os, sys
print('\n'.join(os.path.abspath(arg) for arg in sys.argv[1:]))
または、一連の数値を追加するだけのこの「追加」ツール (cmd.exe または算術演算が組み込まれていないその他の欠陥のあるシェルで立ち往生している人向け):
import sys
print(sum(int(arg) for arg in sys.argv[1:]))
引数の有無にかかわらず、python プログラムを実行できます。引数を使用する場合、それらは argv ベクトル内にあります。例えば
パイソンプログラム!!!
#!/usr/bin/python
import sys
print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)
このようにスクリプトを実行します
$ python test.py arg1 arg2 arg3
そして結果は
Number of arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']
実行可能な python スクリプトがあり、次のような引数で呼び出す場合:
myscript.py -a -b --input myfile --another_argument
次にsys.argv
、以下を含むリストです。
['myscript.py', '-a', '-b', '--input', 'myfile', '--another_argument']
これを使用することがこれらの引数にアクセスする唯一の方法であり、それが主な用途です。ただし、ほとんどのアプリケーションは、 argparseモジュールなどのライブラリを使用して、直接使用する必要なくこの情報にアクセスしますsys.argv
。
sys .argv は、スクリプトの実行時に渡されたコマンド ライン引数を表示します。または、sys.argv は、ターミナルからの実行中に python で渡されたコマンド ライン引数を格納すると言えます。
引数をリスト ds に格納します。
使用例 : cmdlineargs.py などのファイルを作成し、次の内容を入れます。
import sys
print sys.argv
terminal/cli でファイルを実行します。
python cmdlineargs.py
または何かのような
python cmdlineargs.py example example1
今何が起こっているかに注意してください。スクリプトは、そのスクリプトの実行中に cmd ライン引数で渡されたすべてを出力します。
知っておくべき重要事項:
print len(sys.argv) #total arguments passed
sys.argv[0] #this is your script name stored in sys.argv.
print sys.argv #display all arguments passed
sys.argv[0] #is the first argument passed, which is basically the filename.
sys.argv #stores all cmd line args in a list ds
おそらく、次のように渡された特定の引数をそれぞれ調べることができます。
cmdLineArg = len(sys.argv)
i=0
for argv in sys.argv:
if cmdLineArg<=len(sys.argv) :
print "argument",i,"is", str(sys.argv[i])
i=i+1
else:
print "Only script name in sys.argv"
サンプル結果:
端末で次を実行するとします。
python cmdlineargs.py example example1
結果は次のようになります。
argument 0 is cmdlineargs.py
argument 1 is example
argument 2 is example1
引数 0 はファイル名と同じであることに注意してください 。これがお役に立てば幸いです。
賛成票をありがとう、ループに対する私の答えを改善してください。もう少しpythonianの答えは次のようになります:
i=0
for argv in sys.argv:
if cmdLineArg==1:
print "Only script name in sys.argv"
elif (cmdLineArg>1 and cmdLineArg<=len(sys.argv)):
print "argument ",i,"is", str(argv)
i=i+1
print "total arguments passed:\t", totalargs
私もPythonは初めてなので、配列をトラバースするために i と j を宣言する習慣がありました。:)
スクリプト printArgv.py:
import sys
print sys.argv.__class__
spam = sys.argv[1:]
print spam
次のように実行します。
python printArgv.py 1 2 3 4 5
出力は次のとおりです。
<type 'list'>
['1', '2', '3', '4', '5']
つまり、sys.argv は、スクリプト名の後に入力するパラメーターのリストです。