簡體   English   中英

將互斥選項的值存儲在 Python argparse 中的同一參數中

[英]Store values of mutually exclusive options in same argument in Python argparse

我有一個 Python 腳本,它可以在三種不同的環境中部署一些軟件,我們稱它們為developmenttestingproduction 為了選擇腳本應該使用的環境,我想使用互斥標志,如下所示:

./deploy.py --development
./deploy.py --testing
./deploy.py --production

到目前為止,我有這個:

parser = argparse.ArgumentParser(description="Manage deployment")

group = parser.add_mutually_exclusive_group()

group.add_argument("-d", "--development", action='store_true', required=False)
group.add_argument("-t", "--testing", action='store_true', required=False)
group.add_argument("-p", "--production", action='store_true', required=False)

args = parser.parse_args()

事實是,我想將環境放在一個變量中,這樣我就可以輕松檢查它,而不必手動檢查args.developmentargs.testingargs.production

有沒有辦法讓三個參數可以寫入一個公共變量,這樣我就可以做類似args.environment事情?

而不是使用的action='store_true' ,你可以用action='store_const' ,分配一個單獨的const為每個參數和值dest的選項add_argument ,這樣在相互排斥的組中的所有參數都在對象相同的目的地由parse_args返回。

parser = argparse.ArgumentParser(description="Manage deployment")

group = parser.add_mutually_exclusive_group()

group.add_argument("-d", "--development", action='store_const', dest='environment', const='development', required=False)
group.add_argument("-t", "--testing",     action='store_const', dest='environment', const='testing',     required=False)
group.add_argument("-p", "--production",  action='store_const', dest='environment', const='production',  required=False)

args = parser.parse_args()

print(args)

輸出是:

$ ./test_args.py --production
Namespace(environment='production')

您可以只使用一個帶有選擇的參數,而不是 3 個參數:

parser = argparse.ArgumentParser(description="Manage deployment")

parser.add_argument("environment", choices=['development', 'testing', 'production'])

args = parser.parse_args()
print(args)

例子:

>>> test_args.py
usage: concept.py [-h] {development,testing,production}
test_args.py: error: the following arguments are required: environment

>>> test_args.py testing
Namespace(environment='testing')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM