2012-02-07 98 views
68

在Python中,我瞭解如何將int和str參數添加到腳本中。腳本的布爾參數

parser=argparse.ArgumentParser(description="""Mydescription""") 
parser.add_argument('-l', type=str, default='info', help='String argument') 
parser.add_argument('-dt', type=int, default ='', help='int argument') 

布爾值是什麼?

基本上我想通過一個標誌到我的腳本,它會告訴腳本是否執行特定的動作。

+2

出了什麼問題'動作='store_true 「'? – 2012-02-07 21:10:53

+0

你想用布爾值表達什麼行爲? (比如用'-v true'和'-v false'?) – kennytm 2012-02-07 21:11:55

回答

133

您可以使用actionstore_true | store_false,或者你可以使用int並讓隱式強制檢查一個布爾值。

使用action,您不會傳遞--foo=true--foo=false參數,如果將其設置爲true,則只需包含它即可。

python myProgram.py --foo 

事實上,我認爲你可能想要的是

parser.add_argument('-b', action='store_true', default=False) 
+0

這很完美。謝謝。 – dublintech 2012-02-07 21:20:36

+6

我不相信'default = False'是必要的。 – 2014-01-20 01:16:31

+19

@PaulDraper:顯式比隱式更好。 – sberry 2014-02-28 20:06:43

15
parser.add_argument('--foo', action='store_true') 
2
import distutils.util 
ARGP.add_argument('--on', '-o', type=distutils.util.strtobool, default='true') 

實例調用它:

$ ./myscript    # argp.on = 1 
$ ./myscript --on=false  # argp.on = 0 
$ ./myscript --on=False  # argp.on = 0 
$ ./myscript --on=0   # argp.on = 0 
$ ./myscript --on=1   # argp.on = 1 
$ ./myscript -o0   # argp.on = 0 
$ ./myscript -o false  # argp.on == 0 

我應該提到,您可以將參數綁定到本地包裝函數,如果你想支持「yes」和「no」等值,可以處理一些其他精確的字符串匹配。你也可以嘗試將輸入解釋爲yaml,它可以處理yes/no。我已經一段時間沒有這樣做,雖然,我想最近我吸用同樣dest值互斥參數,一個--no-optionaction='store_false',和一個--optionaction='store_true'