Python - 命令列參數

您好,有抱負的程式設計師!今天,我們將進入Python中命令列參數的精彩世界。如果您是程式設計的新手,也別擔心;我會像經驗豐富的老師一樣,耐心引導您走過每一步。讓我們開始吧!

Python - Command-Line Arguments

什麼是命令列參數?

想像一下,您是一位廚師,不想要總是烹飪同一道菜,而是能根據客人的要求更改食材。在程式設計中,命令列參數就像那些客人的特殊要求。它們允許我們在運行Python程式時給予不同的輸入,使我們的代碼更加靈活和強大。

Python命令列參數

在Python中,我們可以透過使用sys模組輕鬆存取命令列參數。讓我們從一個簡單的例子開始:

import sys

print("您好,我是您的第一個Python程式!")
print("參數數量:", len(sys.argv))
print("參數:", str(sys.argv))

將其保存為hello_args.py,並從命令列中如此運行:

python hello_args.py arg1 arg2 arg3

您將看到類似的輸出:

您好,我是您的第一個Python程式!
參數數量: 4
參數: ['hello_args.py', 'arg1', 'arg2', 'arg3']

讓我們來解析一下:

  • sys.argv是一個包含命令列參數的列表。
  • 第一個項目(sys.argv[0])永遠是腳本本身的名稱。
  • 其餘的項目是我們傳遞的參數。

存取特定參數

現在,讓我們創建一個使用這些參數的程式:

import sys

if len(sys.argv) < 2:
print("請提供您的名稱作為參數!")
else:
name = sys.argv[1]
print(f"您好,{name}!歡迎來到命令列參數的世界!")

將其保存為greet.py並運行:

python greet.py Alice

輸出:

您好,Alice!歡迎來到命令列參數的世界!

如果您沒有提供參數運行:

python greet.py

輸出:

請提供您的名稱作為參數!

這個例子展示了我們如何讓我們的程式變得互動和使用者友好!

執行時傳遞參數

讓我們創建一個更實用的例子。我們將製作一個簡單的計算器:

import sys

def calculator(operation, num1, num2):
if operation == 'add':
return num1 + num2
elif operation == 'subtract':
return num1 - num2
elif operation == 'multiply':
return num1 * num2
elif operation == 'divide':
return num1 / num2 if num2 != 0 else "錯誤:除以零"
else:
return "無效的操作"

if len(sys.argv) != 4:
print("用法:python calculator.py <操作> <數字1> <數字2>")
else:
operation = sys.argv[1]
try:
num1 = float(sys.argv[2])
num2 = float(sys.argv[3])
result = calculator(operation, num1, num2)
print(f"結果:{result}")
except ValueError:
print("錯誤:請提供有效的數字")

將其保存為calculator.py並如此使用:

python calculator.py add 5 3

輸出:

結果: 8.0

這個計算器例子展示了我們如何創建強大的工具,這些工具可以接受不同的輸入並執行各種操作。

Python getopt模組

對於更複雜的命令列介面,Python提供了getopt模組。這就像有一位熟練的助手幫助您處理使用者可能提供的所有不同選項和參數。

以下是一個例子:

import sys
import getopt

def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print('test.py -i <inputfile> -o <outputfile>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print('test.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print('輸入檔案為:', inputfile)
print('輸出檔案為:', outputfile)

if __name__ == "__main__":
main(sys.argv[1:])

將其保存為file_processor.py並運行:

python file_processor.py -i input.txt -o output.txt

輸出:

輸入檔案為: input.txt
輸出檔案為: output.txt

getopt模組幫助我們處理短選項(-i, -o)和長選項(--ifile, --ofile),使我們的程式對使用者更加友好。

Python argparse模組

對於更先進的命令列介面,Python提供了argparse模組。這就像為您的命令列需求提供全方位服務的餐廳!

以下是一個例子:

import argparse

parser = argparse.ArgumentParser(description='處理一些整數。')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='累加器的整數')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='求和整數(預設:找出最大值)')

args = parser.parse_args()
print(args.accumulate(args.integers))

將其保存為integer_processor.py並如此使用:

python integer_processor.py 1 2 3 4

輸出:

4

或者使用--sum選項:

python integer_processor.py 1 2 3 4 --sum

輸出:

10

argparse模組會自動生成幫助訊息,處理錯誤,並允許更複雜的參數結構。

方法比較

以下是 我們討論的方法的快速比較:

方法 雜度 使用案例
sys.argv 簡單 基本參數處理
getopt 中等 短選項和長選項
argparse 先進 複雜的命令列介面與自動幫助

請記住,最佳方法取決於您的具體需求。從簡單的sys.argv開始,隨著您的程式變得更加複雜,考慮轉向getoptargparse

總結來說,命令列參數是您Python工具箱中的一項強大工具。它們允許您創建靈活的、互動的程式,能夠適應不同的輸入和 使用者需求。在您的Python旅程中,您將發現無數種使用這些技術來構建驚人軟體的方法。開心編程,願您的命令列冒險永遠充滿興奮!

Credits: Image by storyset