在 Python 開發中,sys.argv 是獲取命令列參數的核心機制。它是一個字串列表,包含了執行腳本時傳遞的所有參數。理解其運作方式,能讓你的腳本更具彈性與互動性。
sys.argv[0] 永遠代表腳本本身的檔案路徑(或檔名),而 sys.argv[1]、sys.argv[2] 依此類推對應後續傳入的參數。Python 採用零基礎索引,這點需特別注意。
例如,執行指令:
python test.py --version help
則對應關係如下:
sys.argv[0] = 'test.py'sys.argv[1] = '--version'sys.argv[2] = 'help'以下範例示範如何解析參數、判斷選項(如 --help、--version),並批次讀取多個檔案內容輸出至標準輸出:
#!/usr/bin/env python
import sys
def readfile(filename):
'''將檔案內容輸出至標準輸出'''
with open(filename, 'r') as f:
for line in f:
print(line, end='')
if __name__ == '__main__':
# 顯示原始參數陣列(除錯用)
print("sys.argv[0]---------", sys.argv[0])
print("sys.argv[1]---------", sys.argv[1] if len(sys.argv) > 1 else "N/A")
print("sys.argv[2]---------", sys.argv[2] if len(sys.argv) > 2 else "N/A")
if len(sys.argv) < 2:
print('錯誤:未指定任何操作。')
sys.exit(1)
# 處理以 -- 開頭的選項
if sys.argv[1].startswith('--'):
option = sys.argv[1][2:] # 移除前兩個字元 '--'
if option == 'version':
print('Version 1.2')
elif option == 'help':
print('''此程式可將檔案內容輸出至標準輸出。
可指定多個檔案。
選項包括:
--version : 顯示版本號
--help : 顯示此說明''')
else:
print('未知選項。')
sys.exit(1)
else:
# 視所有參數為檔案名,依序讀取
for filename in sys.argv[1:]:
readfile(filename)
len(sys.argv),避免索引越界。str.startswith('--') 快速辨識長選項,配合切片 [2:] 取得實際選項名稱。sys.argv[1:] 切片可一次取得所有檔案參數,搭配迴圈處理。with open(...) 確保檔案正確關閉(優於手動 close())。若需支援短選項(如 -v、-h)、選項附帶參數(如 -o output.txt)或複雜指令結構,建議改用 argparse 模組,它提供更強大的參數解析、自動生成說明、型別驗證等功能,是現代 Python CLI 開發的標準選擇。