[英]Python argparse mutually exclusive with stdin being one of the options
[英]Store values of mutually exclusive options in same argument in Python argparse
我有一個 Python 腳本,它可以在三種不同的環境中部署一些軟件,我們稱它們為development
、 testing
和production
。 為了選擇腳本應該使用的環境,我想使用互斥標志,如下所示:
./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.development
、 args.testing
和args.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.