一、理解Python命令行參數
當我們在終端輸入一條Python命令時,可能需要添加一些參數來指定程序的運行方式。這些參數一般以–或-為前綴,後面跟上參數名稱和對應的值。
比如,我們執行python程序時指定一些參數:
$ python program.py --input input_file.txt --output output_file.txt --verbose
在這個例子中,–input、–output和–verbose都是程序的參數。–input和–output後面跟隨的是文件名,–verbose則不需要值。Python提供了一個內置的模塊argparse,可以用來解析命令行參數。
二、使用argparse模塊
使用argparse模塊可以使得從命令行中讀取參數變得容易,下面是一個簡單的例子,演示如何使用argparse模塊解析命令行參數:
import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers))
在上述代碼中,我們創建了一個ArgumentParser對象,在add_argument方法中添加了兩個參數:integers和–sum。
其中,integers是一個位置參數,代表在程序中需要讀取一個或多個整數。nargs=’+’表示該參數可以接收多個整數值,最終會被轉化成列表。metavar=’N’指定當命令行參數出現問題時打印的參數名稱。
–sum是一個可選參數,代表程序需要對接收到的整數進行操作。dest=’accumulate’指定當參數出現時需要將其結果存儲在args.accumulate中,而action=’store_const’表示當此參數出現時,const=sum會存儲在args.accumulate中,如果沒有出現,const=default的值會被存儲在args.accumulate中。
執行上述程序,傳入參數為:1 2 3 4 5,則會執行結果為:15。
三、常用參數類型
argparse模塊支持多種數據類型的參數,下面是一些常見的數據類型:
1. position(位置)
位置參數是必須提供的,它們按照它們被定義的順序從命令行讀取。例如:
parser = argparse.ArgumentParser() parser.add_argument("source") parser.add_argument("destination") args = parser.parse_args()
這將解析Python程序的命令行參數,程序必須包含兩個參數(source和destination)的位置參數。執行結果為:
$ python program.py file1.txt file2.txt
2. Optional(可選)
可選參數是通過名稱而不是位置指定的。例如:
parser = argparse.ArgumentParser() parser.add_argument("--source") parser.add_argument("--destination") args = parser.parse_args()
這個程序將讀取兩個可選參數–source和–destination。執行時可以不帶可選參數:
$ python program.py
或者指定一個參數:
$ python program.py --source file1.txt
3. 支持多個值
argparse還提供了一個選項,允許一個參數多次使用。例如我們在命令行上傳遞多個文件名,可以使用:
parser = argparse.ArgumentParser() parser.add_argument("file_list", nargs="+") args = parser.parse_args()
參數nargs=”+“允許file_list參數為多個值:
$ python program.py file1.txt file2.txt directory/*.txt
4. 布爾值
可以使用store_true / store_false選項,將程序中的布爾值參數處理為命令行選項。例如:
parser = argparse.ArgumentParser() parser.add_argument("--debug", action="store_true") args = parser.parse_args()
可選參數–debug現在是布爾類型的,如果提供了這個選項,Python中的args.debug將為True。否則為False。
四、處理命令行參數
在我們使用argparse程序解析了命令行參數後,我們仍然需要使用它們執行程序。下面的代碼展示了如何使用argparse來處理命令行參數:
import argparse parser = argparse.ArgumentParser() parser.add_argument("--input", help="input file path") parser.add_argument("--output", help="output file path") parser.add_argument("--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("verbose mode on") with open(args.input, "r") as infile, open(args.output, "w") as outfile: for line in infile: outfile.write(line) print("done")
在上述代碼中,我們聲明了三個可選參數–input、–output 和–verbose。–input和–output參數我們使用了help關鍵字為其添加描述。
在使用args.input和args.output時,需要判斷傳入的參數是否為None。通過判斷args.verbose可以在程序中開啟或關閉verbose模式,即輸出更多信息。
五、總結
本文主要介紹了Python命令行參數的基礎知識,以及使用argparse模塊解析命令行參數的方法,同時列舉了幾種常見的命令行參數類型和處理方法。熟悉這些方法可以使得Python程序的調用更加方便和靈活。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/184043.html