Python 中的 sys.argv 是個什麼鬼?

小詹學Python發表於2018-07-10

首發原創:微信公眾號“小詹學Python”

最近在 github 上 git 別人的程式碼下來學習 ,其中有一個 face-detection 相關的程式碼 ,就涉及了 sys.argv ,並且執行後是這個樣子~

Python 中的 sys.argv 是個什麼鬼?

本著問問題前先百度先google的原則 ,在網上找到了原因 ,就出在sys.argv 上 。那麼 ,它究竟是個什麼鬼 ?

sys.argv[] 說白了就是一個從程式外部獲取引數的橋樑 ,我們從外部取得的引數可以是多個 ,所以獲得的是一個列表(list),也就是說sys.argv其實可以看作是一個列表 ,所以才能用[]提取其中的元素 。其第一個元素(sys.argv[0])是程式本身 ,隨後才依次是外部給予的引數 。

下邊用四句話來解釋它到底是個什麼鬼 !?

1. 本質是一個列表

可以利用type()方法檢視型別 :

import sys
複製程式碼
print(type(sys.argv))
print(len(sys.argv))
複製程式碼


命令視窗呼叫得到的結果如下 ,證實為列表型別 。且外部輸入元素用空格隔開

C:\Users\Jan\test2\tensorflow-face-detection>python test_argv.py 1 2 3 4
<class 'list'>
5
複製程式碼


2. 列表元素來自外部輸入

3. 外部輸入從1開始

4. argv[0] 表示本身程式碼檔案路徑

這裡 ,建立一個test_argv.py 檔案 ,在命令視窗呼叫並輸入需要的引數 。

import sys

script,first,second,third = sys.argv

print ("The script is called:{%s}"% script)
print ("The first variable is:{%s}"% first)
print ("The second variable is:{%s}"% second)
print ("The third variable is:{%s}"% third)
複製程式碼

得到的結果如下:

C:\Users\Jan\test2\tensorflow-face-detection>python test_argv.py 1 2 3
The script is called:{test_argv.py}
The first variable is:{1}
The second variable is:{2}
The third variable is:{3}
複製程式碼

呼叫過程一共從外部輸入3個引數 ,但是輸出了四個 ,這個例項綜合講述了 2 ,3 ,4 三點 。即在外部輸入時 ,argv[0] 預設為本身程式碼檔案路徑 ,且外部輸入從 argv[1] 開始 。

對照著例項 ,其實還算比較好理解 。這裡再舉一個例子便於理解 。我們知道 os 模組裡的 os.system 是可以開啟檔案的,這裡外部輸入引數改為一個 txt 檔案 ,呼叫sys.argv[] 打卡 。

import sys
import os

os.system(sys.argv[1])
複製程式碼

在命令視窗呼叫並輸入引數(引數為要開啟的檔名),如下 。這裡程式碼中引數為sys.argv[1],即外部輸入的第一個引數test_argv.txt ,如果是sys.argv[0] ,則開啟的是程式碼本身。

Python 中的 sys.argv 是個什麼鬼?


最後歡迎掃碼關注,和小詹一起愉快的學習玩耍噢~

Python 中的 sys.argv 是個什麼鬼?


相關文章