11

argv

一体何なんだ!?

編集:できれば、1行か2行書いて、それがどのように機能するかを説明してください。

4

7 に答える 7

27

この簡単なプログラムを試してください。program.py

import sys
print sys.argv

そして実行してみてください

python program.py
python program.py a b c
python program.py hello world

argv が何であるかに注意してください。

于 2012-11-07T06:02:11.910 に答える
18

これは引数ベクトルを意味し、プログラムに渡される引数が含まれています。最初のものは常にプログラム名です。

たとえば、Python プログラムを次のように実行した場合...

 $ python your_script.py --yes

...次に、あなたの意志にはandsys.argvが含まれます。your_script.py--yes

于 2012-11-07T05:58:46.777 に答える
13

「より高いレベルのコードを学び始める」ために時間を無駄にする前に、このような情報を見つける方法を学ぶ必要があります。なじみのない関数/クラス/変数を検索する方法を知っていれば、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:]))
于 2012-11-07T06:51:14.073 に答える
5

引数の有無にかかわらず、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']

例は チュートリアルポイントからのものです

于 2012-11-07T06:02:35.583 に答える
2

実行可能な python スクリプトがあり、次のような引数で呼び出す場合:

myscript.py -a -b --input myfile --another_argument

次にsys.argv、以下を含むリストです。

['myscript.py', '-a', '-b', '--input', 'myfile', '--another_argument']

これを使用することがこれらの引数にアクセスする唯一の方法であり、それが主な用途です。ただし、ほとんどのアプリケーションは、 argparseモジュールなどのライブラリを使用して、直接使用する必要なくこの情報にアクセスしますsys.argv

于 2012-11-07T06:04:31.113 に答える
2

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 を宣言する習慣がありました。:)

于 2016-09-07T00:25:51.103 に答える
1

スクリプト 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 は、スクリプト名の後に入力するパラメーターのリストです。

于 2016-12-16T05:30:24.933 に答える