Python里sys.argv的含義 sys模塊中命令行參數(shù)argv的用法說明

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é)。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享