1. Python 命令列參數的基本用法
什麼是命令列參數?
在執行 Python 程式時,可以與執行指令一同提供額外資訊,這些額外資訊稱為「命令列參數」。透過這些參數,可以靈活改變程式的行為,或輕鬆地從外部傳遞資料。例如,可以將檔案名稱或設定值作為參數來傳遞,讓程式的內容動態變更。
使用 sys.argv
來獲取命令列參數
在 Python 中,可以使用標準函式庫 sys
模組來獲取命令列參數。sys.argv
是一個以列表形式存放命令列參數的變數。列表的第一個元素(sys.argv[0]
)是執行的腳本名稱,而第二個元素以後則是作為參數傳遞的值。
範例程式碼:簡單的計算程式
import sys
def main():
if len(sys.argv) < 3:
print("錯誤:需要提供兩個參數")
return
num1 = float(sys.argv[1])
num2 = float(sys.argv[2])
print(f"總和: {num1 + num2}")
if __name__ == "__main__":
main()
上面的程式會計算從命令列傳遞的兩個數值的總和。執行範例如下:
$ python script.py 3 5
總和: 8.0

2. 使用 argparse
模組進行進階參數處理
argparse
的基本概念
雖然 sys.argv
可以用來獲取基本參數,但當參數數量變多,或者需要處理選項參數與標誌(如 --verbose
)時,使用標準函式庫 argparse
會更方便。這個模組可以讓參數解析變得更簡單,並且自動生成錯誤訊息。
解析參數並建立解析器
使用 argparse
時,首先需要建立一個解析器,然後設定參數,最後解析命令列輸入的參數。
範例程式碼:基本的 argparse
使用方式
import argparse
def main():
parser = argparse.ArgumentParser(description='這是一個範例程式')
parser.add_argument('arg1', help='第一個參數')
parser.add_argument('arg2', type=float, help='第二個數值參數')
args = parser.parse_args()
print(f"arg1 = {args.arg1}")
print(f"arg2 = {args.arg2}")
if __name__ == "__main__":
main()
這個程式會接收兩個參數,其中 arg1
為字串,arg2
為數值,解析後輸出結果。
$ python script.py test 5.5
arg1 = test
arg2 = 5.5
處理選項參數與標誌
argparse
的強大功能之一是可以處理選項參數與標誌。這讓我們可以根據是否提供特定參數來執行不同的程式邏輯,例如提供詳細輸出(如 --verbose
標誌)。
範例程式碼:使用選項參數與標誌
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', action='store_true', help='顯示詳細輸出')
parser.add_argument('numbers', nargs='+', type=float, help='數值列表')
args = parser.parse_args()
total = sum(args.numbers)
if args.verbose:
print(f"計算詳細資訊:{args.numbers} 的總和為 {total}")
else:
print(f"總和: {total}")
if __name__ == "__main__":
main()
這個程式中,如果使用 --verbose
標誌,則會輸出更詳細的計算資訊;如果未指定,則只會顯示總和。
$ python script.py 1 2 3 --verbose
計算詳細資訊:[1.0, 2.0, 3.0] 的總和為 6.0

3. 錯誤處理與參數驗證
驗證參數數量與類型
處理命令列參數時,需要確保使用者輸入的參數數量與類型正確,否則程式可能會出錯。透過適當的驗證,可以提升程式的穩定性,避免不必要的錯誤。
範例程式碼:檢查參數數量與類型
import sys
def main():
if len(sys.argv) != 3:
print("錯誤:需要提供兩個參數")
return
try:
num1 = float(sys.argv[1])
num2 = float(sys.argv[2])
except ValueError:
print("錯誤:參數必須是數值")
return
print(f"總和: {num1 + num2}")
if __name__ == "__main__":
main()
這個程式會檢查:
- 輸入的參數數量是否正確(應該是兩個數值)。
- 參數是否可以轉換為數值,若無法轉換則回傳錯誤訊息。
4. 實際應用與進階使用
建立命令列工具的應用範例
在實際應用中,命令列參數可以用來開發各種工具,例如處理文件或數據分析。以下是一個簡單的命令列工具範例,它可以計算指定文件的行數。
範例程式碼:計算文件行數的工具
import argparse
def main():
parser = argparse.ArgumentParser(description='計算文件的行數')
parser.add_argument('filename', help='要計算的文件名稱')
args = parser.parse_args()
try:
with open(args.filename, 'r') as file:
lines = file.readlines()
print(f"文件 {args.filename} 的行數: {len(lines)}")
except FileNotFoundError:
print(f"錯誤:找不到文件 {args.filename}")
if __name__ == "__main__":
main()
這個工具可以讀取指定文件,並計算其中的行數,執行範例如下:
$ python count_lines.py example.txt
文件 example.txt 的行數: 100
5. 總結
透過學習 Python 命令列參數的處理方法,可以讓程式具備更高的靈活性。從使用 sys.argv
來獲取簡單的參數,到使用 argparse
來處理複雜的命令列輸入,每種方法都有其適用的場景。選擇適合的方式,能讓程式更容易維護且更具擴展性。
此外,適當地加入錯誤處理與參數驗證,可以讓程式更加穩定,減少潛在的錯誤發生。命令列參數的應用範圍很廣,例如建立自動化腳本、開發命令列工具等,掌握這些技巧將能有效提升開發效率。
如果你對命令列參數的處理方式有更深入的需求,可以參閱官方文件或試著自己實作一些命令列工具來加深理解。