Python 中的命令列引數

Manav Narula 2023年1月30日
  1. 在 Python 中使用 sys 模組處理命令列引數
  2. 在 Python 中使用 getopt 模組處理命令列引數
  3. 在 Python 中使用 argparse 模組處理命令列引數
Python 中的命令列引數

命令列引數是在執行檔案時在命令列視窗中提供的那些值。它們很方便,因為它允許我們在執行程式時傳遞值。

在 Python 中,可以使用不同的模組來處理命令列引數,這將在下面討論。

在 Python 中使用 sys 模組處理命令列引數

sys.argv() 用於將命令列中提供的引數儲存在列表型別結構中。檔名被視為第一個引數。

例如,

import sys

print("Arguments without the script name ", (len(sys.argv) - 1))
print("Arguments given ")
for i in range(1, len(sys.argv)):
    print(sys.argv[i])

在上面的例子中,我們在執行時傳遞了一些引數並顯示了引數的總數和它們的值。

在 Python 中使用 getopt 模組處理命令列引數

getopt 模組還處理命令列引數。它允許我們驗證給定的值。我們可以提供帶有引數的值以及指令碼可以識別的選項字串。該模組與 sys 模組配合使用以獲得更好的處理。

getopt() 建構函式用於初始化解析引數的物件。當無法從引數列表中識別該選項時,它會返回 getopt.error

我們在下面的程式碼中使用它。

import getopt
import sys

lst = sys.argv[1:]
options = "abc:"
long_options = ["A_Message", "B_Message", "C_Message"]

try:

    arguments, values = getopt.getopt(lst, options, long_options)

    for currentArgument, currentValue in arguments:

        if currentArgument in ("-a", "--A_Message"):
            print("Message A received")
        elif currentArgument in ("-b", "--B_Message"):
            print("Message B received")
        elif currentArgument in ("-c", "--C_Message"):
            print("Message C received")

except getopt.error as err:
    print("Error")

在 Python 中使用 argparse 模組處理命令列引數

argparse 模組是迄今為止使用命令列引數最方便的模組。該模組提供了很大的靈活性,因為它可以處理位置引數、可選引數並指定它們的型別。

如果缺少某些引數,我們可以設定一些預設值,甚至顯示幫助訊息。

ArgumentParser() 函式建立一個解析器物件。parse.args() 函式從命令列讀取引數。

例如,

import argparse

parser = argparse.ArgumentParser(description="Which Message?")
parser.add_argument("a")
parser.add_argument("b")
args = parser.parse_args()
print(args.a, args.b)
作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn