2012-11-07 138 views
4

的argv -什麼是「argv」,它有什麼作用?

地球上這是什麼!?

編輯:如果可以的話,請你寫一兩行字,並解釋它是如何工作的?

+6

你知道Python的內置'help'嗎?只需啓動一個解釋器,輸入'import sys',然後輸入'help(sys)',它會顯示「argv - 命令行參數; argv [0]是腳本路徑名,如果已知的話」。或者,查看聯機文檔(http://docs.python.org/2/library/sys.html for 2.7,http://docs.python.org/3/library/sys.html for 3.3)。你會發現比在SO上提出問題更快的方法,並等待一個小時讓人們爲你工作。 (如果你無法找到文檔,就像德米特里說的,谷歌是你的朋友。) – abarnert

回答

10

這意味着參數矢量並且它包含傳遞給程序的參數。第一個始終是程序名稱。

例如,如果你執行你的Python程序是這樣的...

$ python your_script.py --yes 

...那麼你sys.argv將包含your_script.py--yes

21

試試這個簡單的程序,將其命名爲program.py

import sys 
print sys.argv 

,並嘗試執行

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

注意的是argv的現在。

+0

哈哈!萬分感謝。那麼,如果我總是必須在運行該程序時始終在終端/命令提示符中鍵入參數,它究竟有多有用呢? –

+2

這很有用,因爲有時候你想在不同的參數上多次運行相同的程序。可以考慮使用像ls這樣的內置工具(如果你使用的是Windows,則可以使用「dir」)。你不需要一個工具來處理當前目錄中的所有文本文件,另一個工具可以處理我主目錄下的所有文件,包括隱藏文件等等。相反,你只需要一個工具,你可以輸入'ls * .txt'或者'ls -a〜'或者其他任意組合。 – abarnert

+3

+1,因爲這顯示了一種實驗性地找到答案的有用方法,而不僅僅是重新說明文檔中的內容。 – abarnert

5

你可以帶或不帶參數運行Python程序。如果你使用參數,它們在argv向量中。例如

Python程序!

#!/usr/bin/python 

import sys 

print 'Number of arguments:', len(sys.argv), 'arguments.' 
print 'Argument List:', str(sys.argv) 

RUN SCRIPT像這樣

$ python test.py arg1 arg2 arg3 

AND結果爲

Number of arguments: 4 arguments. 
Argument List: ['test.py', 'arg1', 'arg2', 'arg3'] 

實例是從 tutorialspoint

+0

'str()'是不必要的。 –

2

如果你有一個可執行的Python腳本,並用這樣的參數來調用它:

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

然後sys.argv是包含一個列表:

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

使用它來訪問這些參數的唯一途徑,而這是它的主要用途。但是,大多數應用程序使用庫(如argparse模塊)來訪問此信息,而無需直接使用sys.argv

+0

的確,這是訪問這些參數的唯一方法(除了在Windows上),但這有點讓人誤解。很多時候你會用'fileinput'或'argparse'來代替 - 當然這些模塊本身也使用'sys.argv'來訪問參數,但作爲一個用戶你不需要知道這一點。 – abarnert

+0

這就是我最後一句話應該表明的意思,但也許它不是很清楚...... – aquavitae

+0

是的,我只是建議讓它更清楚一點 - 它已經在技術上是正確的。 – abarnert

9

在您浪費時間「開始學習更高級別的代碼」之前,您需要了解如何查找此類信息。知道如何查找不熟悉的函數/類/變量,而無需等待30-60分鐘讓SO上的人回答您(並且顯然會在過程中架起多個降價提示),這將比添加更多一條信息到你的曲目。

從內置的幫助:

>>> import sys 
>>> help(sys) 
… 
argv -- command line arguments; argv[0] is the script pathname if known 
… 

這適用於任何模塊。通常,模塊中的各個類和函數都有更詳細的信息(但對argv不起作用,因爲它只是一個list,列表中沒有自定義幫助)。

如果這還不夠的信息,the documentation(或the 2.x documentation)說:

SYS。 argv

傳遞給Python腳本的命令行參數列表。 argv [0]是腳本名稱(與操作系統有關,無論這是否是完整的路徑名)。如果使用解釋器的-c命令行選項執行該命令,argv [0]被設置爲字符串'-c'。如果沒有腳本名稱被傳遞給Python解釋器,argv [0]是空字符串。

要循環訪問標準輸入或命令行上給出的文件列表,請參閱fileinput模塊。

爲谷歌搜索「蟒蛇argv的」第一個網頁結果是a blog post by Python author Guido這可能是一個有點太爲您先進的,但第二個是a tutorial的「命令行參數」。

由於大部分的這些事情告訴你,很多簡單的腳本往往只使用fileinput,而不是處理argv直接,而更復雜的腳本,經常需要用到​​(或optparsegetopt,或其他替代品,如果你需要使用Python 2.6或更早版本)。

其中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:])) 
2

sys .argv將顯示通訊並在運行腳本時傳遞行參數,或者您可以說sys.argv將存儲從終端運行時在python中傳遞的命令行參數

它將參數存儲在列表ds中。

樣本的用法: 創建一個文件說:cmdlineargs。PY並把它下面:

import sys 
print sys.argv 

現在,在你的終端/ 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相同的文件名。希望這有幫助。


感謝upvotes,提高我對循環答案。多一點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遍歷數組的習慣。 :)

+0

感謝讚揚。進一步提高了我的答案是:多一點pythonian答案應該是這樣的: – geekidharsh

+0

cmdLineArg = LEN(sys.argv中) I = 0 在sys.argv中的argv: 如果cmdLineArg == 1: \t打印「只有腳本名在sys.argv「 elif(cmdLineArg> 1和cmdLineArg <= len(sys.argv)): print」argument「,i,」is「,str(argv) i = i + 1 print」通過:\ t「,totalargs – geekidharsh

0

腳本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中是您在腳本名稱後輸入的參數列表。

相關問題