平台:win10+python 3.7.0
一、sys說明:
sys.argv這個函數是我們寫python腳本中最常用的一個函數.
sys是Python的一個「標准庫」,也就是官方出的「模塊」,是「System」的簡寫,封裝了一些系統的信息和接口。
官方的文檔參考:https://docs.python.org/2/library/sys.html
中文版文檔參考:http://xukaizijian.blog.163.com/blog/static/170433119201111625428624/
二、實例說明:
通過實例具體說明:
創建實例一test01.py,如下:
1 #conding:utf-8 2 import sys #導入sys模塊 3 print(sys.argv[0]) # 打印sys.argv的第0個參數 4 5 # 來運行一下這個腳本,我們隨便給他點參數,1個,2個,3個或更多都行. 6 #py -3 test01.py a b c d e f 7 #test01.py 8 #得出結果就顯示當前腳本名,這里我們就可以得出第一個結論.
得出結果就顯示當前腳本名,這里我們就可以得出第一個結論:sys.argv[0] 返回是的腳本
現在我們修改一下,得到實例二test02.py, 如下:
1 #conding:utf-8 2 import sys #導入sys模塊 3 print(sys.argv[1]) # 打印sys.argv的第1個參數 4 5 #執行如下: 6 #py -3 test02.py a b c d e f 7 #a
得出結果就是第一個參數的值.通過這樣類推,我們就知道sys.argv參數的效果了.
返回腳本本身的名字及給定腳本的參數.
了解shell腳本編程的可以這樣理解這些參數,sys.argv[0] 就是shell 腳本中的basename ,而sys.argv[1]....就是shell中的$1,$2.....
sys.argv也支持python字符串中的切片,我們還是先修改代碼,測試如下——實例三test03.py、實例四test04.py和實例五test05.py:
1 #conding:utf-8 2 import sys #導入sys模塊 3 print(sys.argv[1:]) # 打印sys.argv的第1個參數及其以后所有參數,返回的值是一個list 4 5 #結果如下: 6 #py -3 test03.py a b c d e f 7 #['a', 'b', 'c', 'd', 'e', 'f']
1 #conding:utf-8 2 import sys #導入sys模塊 3 print(sys.argv[1:3]) # 打印sys.argv的第1個參數到第三個參數,不包含第三個參數,返回的值是一個list 4 5 #結果如下: 6 #py -3 test04.py a b c d e f 7 #['a', 'b']
1 #conding:utf-8 2 import sys #導入sys模塊 3 print(sys.argv[1:5:2]) 4 print(sys.argv[-1]) 5 print(sys.argv[::-1]) 6 7 #結果如下: 8 #py -3 test05.py a b c d e f 9 # ['a', 'c'] 10 # f 11 #['f', 'e', 'd', 'c', 'b', 'a', '1234.py']
上面示例使用了字符串的切片方法,需要先了解字符串的切片知識:見我另一篇博客。
通過如上示例,應該明白sys.argv的使用和暫時的結果.
sys.argv就是將程序本身和給程序參數返回一個list,這個list中的索引為0的就是程序本身.因此,里面的給sys.argv的參數就是list索引.
三、解決問題:
sys.argv[-1]返回的是調用test**.py后緊跟的所有參數中最后一個,是一個list中的最后一個元素,而這個list是這樣的:它是sys模塊下的一個全局變量,第一個元素是模塊名sys.argv[0]、后面是依次傳入的參數sys.argv[1]、sys.argv[2]或sys.argv[-1]、sys.argv[-2]。
