Python 在命令列引數中解析布林值
當從任何命令列執行 Python 指令碼時,例如命令提示符、Git Bash、Linux 終端、MAC Shell 等,我們可以向它們傳遞引數或值。這些值稱為命令列引數。
這些引數通常是整數、浮點數、字串和表示為字串的布林值,這意味著它們必須在程式碼中進行型別轉換。
在本文中,我們將學習如何使用 Python 從命令列引數解析布林值。
使用 Python 中的 argparse 模組從命令列引數解析布林值
Python 有許多基本的內建模組,例如 math、random、json、csv 等,旨在解決一般和重複的程式設計問題。一個這樣的包是 argparse,它可以幫助程式設計師快速編寫使用者友好的命令列介面。使用此模組,可以定義程式正常工作所需的引數。
除了定義之外,argparse 模組還可以定義預設值、錯誤訊息、幫助文字,並對值執行常見操作,例如驗證、型別轉換、轉換等。我們可以將 argparse 模組用於我們的用例.
我們將實現一個需要一個字串值和兩個布林值才能正常工作的程式。這只是用於理解目的的示例。
請參考以下 Python 程式碼。
import argparse
def parse_boolean(value):
value = value.lower()
if value in ["true", "yes", "y", "1", "t"]:
return True
elif value in ["false", "no", "n", "0", "f"]:
return False
return False
def output(name, burger, cake):
if burger and cake:
return f"{name} is eating a burger and a cake."
elif burger:
return f"{name} is eating a burger."
elif cake:
return f"{name} is eating a cake."
return f"{name} is eating nothing."
parser = argparse.ArgumentParser(
description="A program that accepts one string and two boolean values."
)
parser.add_argument("name", help="Name of a person.")
parser.add_argument(
"--burger", type=parse_boolean, default=False, help="Flag for burger."
)
parser.add_argument("--cake", type=parse_boolean, default=False, help="Flag for cake.")
args = parser.parse_args()
print(output(args.name, args.burger, args.cake))
Python 程式碼說明
上面的 Python 程式碼首先建立了一個 ArgumentParser 類的物件。此類具有解析命令列引數的所有實用程式。以下是該類的類簽名。
class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True, exit_on_error=True)
所有這些引數都是關鍵字引數,它們應該作為關鍵字引數傳遞給類。
接下來,使用該物件的 add_argument() 函式,我們向解析器新增引數。以下是此函式的一些主要引數。
name- 名稱或選項字串列表。例如,world,或--world和-w。action- 在命令列引數中找到此引數時要執行的操作。nargs- 應該考慮的命令列引數的數量。type- 引數應轉換為的資料型別。const-action和nargs所需的常量值。default- 如果命令列引數中缺少引數,則應考慮的預設值。help- 引數的幫助文字。
我們新增三個引數,即 name、--burger 和 --cake。這裡,name 是位置引數,--burger 和 --cake 是兩個可選引數。我們為每個引數定義了幫助文字,對於可選引數,我們還定義了預設值。
接下來,我們使用 parse_args() 方法將字串引數轉換為它們各自的物件或資料型別。此方法返回一個 Namespace 物件,其中包含所有引數作為指向其各自轉換值的鍵。我們可以按如下方式訪問這些型別轉換的值。
args.name
args.burger
args.cake
我們還定義了兩個函式,即 parse_boolean() 和 output()。parse_boolean() 函式接受作為可選布林引數旁邊的命令列引數輸入的值。然後它解釋該值並返回相應的布林值。
請注意,這裡的函式將為任何亂碼值返回 False。人們也可以引發一個異常而不是返回一些預設值。你可以使用以下命令對其進行測試。
python main.py Vaibhav --burger Hello --cake World
輸出:
Vaibhav is eating nothing.
另一個函式是 output() 函式。該函式接受三個值(一個字串和兩個布林值)並返回一個合適的輸出字串。
測試
要測試程式,請從任何命令列執行以下命令。請注意,以下命令認為上述 Python 程式碼存在於名為 main.py 的檔案中。
python main.py Vaibhav --burger True --cake True
python main.py Vaibhav --burger T --cake 0
python main.py Vaibhav --burger False --cake False
python main.py Vaibhav --burger True --cake False
python main.py Vaibhav --burger False --cake True
python main.py Vaibhav --burger ABC --cake XYZ
python main.py Vaibhav
python main.py Vaibhav --burger True
python main.py Vaibhav --cake False
python main.py
輸出:
Vaibhav is eating a burger and a cake.
Vaibhav is eating a burger.
Vaibhav is eating nothing.
Vaibhav is eating a burger.
Vaibhav is eating a cake.
Vaibhav is eating nothing.
Vaibhav is eating nothing.
Vaibhav is eating a burger.
Vaibhav is eating nothing.
usage: main.py [-h] [--burger BURGER] [--cake CAKE] name
main.py: error: the following arguments are required: name
正如我們所見,最後一個命令 python main.py 引發了錯誤。背後的原因很簡單; name 是一個位置和強制引數。
