sys.argv用于獲取python腳本的命令行參數(shù)。1. 參數(shù)以列表形式存儲,第一個(gè)元素是腳本名稱;2. 使用前需導(dǎo)入sys模塊;3. 可通過索引訪問參數(shù),但需先判斷參數(shù)個(gè)數(shù)或使用異常處理避免錯(cuò)誤;4. 常見用途包括處理配置項(xiàng)和批量處理文件;5. 注意事項(xiàng)包括參數(shù)均為字符串、順序重要、含空格需加引號及手動類型轉(zhuǎn)換等細(xì)節(jié)。
在python腳本運(yùn)行時(shí),我們常常會看到sys.argv這個(gè)用法。它其實(shí)是用來獲取命令行參數(shù)的。也就是說,當(dāng)你在終端或者命令行里運(yùn)行一個(gè)python程序,并且后面加了一些參數(shù)時(shí),這些參數(shù)就會被保存在sys.argv這個(gè)列表中。
舉個(gè)最簡單的例子:
python script.py arg1 arg2
在這個(gè)例子中,sys.argv的內(nèi)容就是:
['script.py', 'arg1', 'arg2']
可以看到,第一個(gè)元素是腳本名稱(也就是你執(zhí)行的文件名),后面的才是你傳進(jìn)去的參數(shù)。
立即學(xué)習(xí)“Python免費(fèi)學(xué)習(xí)筆記(深入)”;
如何使用sys.argv獲取命令行參數(shù)?
要使用sys.argv,首先得導(dǎo)入sys模塊:
import sys print(sys.argv)
運(yùn)行上面這段代碼后,你就能看到傳入的所有參數(shù)了。
通常我們會根據(jù)參數(shù)個(gè)數(shù)做一些判斷,比如:
if len(sys.argv) < 2: print("請?zhí)峁┲辽僖粋€(gè)參數(shù)") sys.exit(1) print("第一個(gè)參數(shù)是:", sys.argv[1])
這種方式特別適合寫一些命令行工具或自動化腳本,可以讓你的腳本變得更靈活。
常見使用場景和注意事項(xiàng)
場景一:處理用戶輸入配置項(xiàng)
比如你想讓腳本根據(jù)不同的參數(shù)做不同的事情:
python process.py --mode dev
在代碼中可以這樣處理:
if sys.argv[1] == '--mode' and sys.argv[2] == 'dev': print("進(jìn)入開發(fā)模式")
當(dāng)然,更復(fù)雜的情況建議使用argparse模塊來處理。
場景二:批量處理文件或數(shù)據(jù)
如果你需要處理多個(gè)文件,可以通過命令行傳入文件名:
python batch_process.py file1.txt file2.txt
然后在腳本中遍歷所有文件名:
for filename in sys.argv[1:]: with open(filename, 'r') as f: # 處理文件內(nèi)容
注意事項(xiàng):
-
所有參數(shù)都是字符串類型,數(shù)字也得自己轉(zhuǎn)換
-
參數(shù)順序很重要,不能搞錯(cuò)位置
-
如果參數(shù)中包含空格,需要用引號包裹起來,例如:
python script.py "hello world"
小技巧:如何避免索引錯(cuò)誤?
訪問sys.argv的時(shí)候,如果參數(shù)不夠,直接取下標(biāo)容易報(bào)錯(cuò),比如:
print(sys.argv[1]) # 如果沒有參數(shù),這里就會出錯(cuò)
為了避免這種情況,可以在訪問前判斷長度:
if len(sys.argv) > 1: print(sys.argv[1]) else: print("缺少必要參數(shù)")
也可以用try-except結(jié)構(gòu)捕獲異常:
try: print(sys.argv[1]) except IndexError: print("參數(shù)不足")
這兩種方式都可以有效防止腳本崩潰。
基本上就這些。sys.argv雖然簡單,但非常實(shí)用,特別是在寫命令行腳本的時(shí)候。不復(fù)雜但容易忽略的是參數(shù)順序、類型轉(zhuǎn)換和邊界檢查這些細(xì)節(jié)。