回答
這意味着參數矢量並且它包含傳遞給程序的參數。第一個始終是程序名稱。
例如,如果你執行你的Python程序是這樣的...
$ python your_script.py --yes
...那麼你sys.argv
將包含your_script.py
和--yes
。
試試這個簡單的程序,將其命名爲program.py
import sys
print sys.argv
,並嘗試執行
python program.py
python program.py a b c
python program.py hello world
注意的是argv的現在。
哈哈!萬分感謝。那麼,如果我總是必須在運行該程序時始終在終端/命令提示符中鍵入參數,它究竟有多有用呢? –
這很有用,因爲有時候你想在不同的參數上多次運行相同的程序。可以考慮使用像ls這樣的內置工具(如果你使用的是Windows,則可以使用「dir」)。你不需要一個工具來處理當前目錄中的所有文本文件,另一個工具可以處理我主目錄下的所有文件,包括隱藏文件等等。相反,你只需要一個工具,你可以輸入'ls * .txt'或者'ls -a〜'或者其他任意組合。 – abarnert
+1,因爲這顯示了一種實驗性地找到答案的有用方法,而不僅僅是重新說明文檔中的內容。 – abarnert
你可以帶或不帶參數運行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
'str()'是不必要的。 –
如果你有一個可執行的Python腳本,並用這樣的參數來調用它:
myscript.py -a -b --input myfile --another_argument
然後sys.argv
是包含一個列表:
['myscript.py', '-a', '-b', '--input', 'myfile', '--another_argument']
使用它來訪問這些參數的唯一途徑,而這是它的主要用途。但是,大多數應用程序使用庫(如argparse模塊)來訪問此信息,而無需直接使用sys.argv
。
在您浪費時間「開始學習更高級別的代碼」之前,您需要了解如何查找此類信息。知道如何查找不熟悉的函數/類/變量,而無需等待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
直接,而更復雜的腳本,經常需要用到(或optparse
,getopt
,或其他替代品,如果你需要使用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:]))
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遍歷數組的習慣。 :)
感謝讚揚。進一步提高了我的答案是:多一點pythonian答案應該是這樣的: – geekidharsh
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
腳本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中是您在腳本名稱後輸入的參數列表。
- 1. 什麼是Thread.CurrentPrincipal,它有什麼作用?
- 2. Javascript「窗口」:它的目的是什麼?它有什麼作用?
- 3. 爲什麼不argv工作?
- 4. 什麼是newproxy,它有什麼用處?
- 5. char * argv []是什麼意思?
- 6. 什麼是char * const argv []?
- 7. 寫「@ARGV || ='。';」?有什麼不對?
- 8. 我不知道什麼是argv和raw_input()有什麼不同?
- 9. 我的代碼有什麼問題?什麼是argv [1]?
- 10. 它有什麼作用?
- 11. mapRectThatFits:它有什麼作用?
- 12. Expression.Invoke - 它有什麼作用?
- 13. DefaultMemberAttribute - 它有什麼作用?
- 14. flvFPW1() - 它有什麼作用?
- 15. 它有什麼作用?
- 16. 爲什麼$#ARGV 0?
- 17. 什麼是PS3 Root密鑰/它有什麼作用/它是如何使用的?
- 18. Yii 2.0是什麼?它有什麼作用?
- 19. 什麼是Dart「Expando」功能,它有什麼作用?
- 20. .Net框架上的clr.dll是什麼?它有什麼作用?
- 21. .params到底是什麼,它有什麼作用?
- 22. `cache_line_align_`的作用是什麼?它有什麼好處?
- 23. 什麼是REST響應,它有什麼作用?
- 24. 什麼是jQuery等同於此,它有什麼作用?
- 25. 什麼是博森,它有什麼作用?
- 26. Android Bootstrap究竟是什麼,它有什麼作用?
- 27. 這是什麼帕斯卡方言?它有什麼作用?
- 28. 什麼是Cygwin和它有什麼作用
- 29. 什麼是java中的對象,它有什麼作用
- 30. '[]'之間的代碼是什麼?它有什麼作用?
你知道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