2011-03-10 35 views
86

我已經使用​​創建了一個腳本。argparse模塊如何添加沒有任何參數的選項?

該腳本需要將配置文件名稱作爲選項,用戶可以指定是否需要完全執行腳本或僅對其進行模擬。

要通過的參數:./script -f config_file -s./script -f config_file

這對於-f config_file部分是可以的,但它不斷詢問我是否是-s選項的參數,並且不應該跟隨任何參數。

我已經試過這樣:

parser = argparse.ArgumentParser() 
parser.add_argument('-f', '--file') 
#parser.add_argument('-s', '--simulate', nargs = '0') 
args = parser.parse_args() 
if args.file: 
    config_file = args.file 
if args.set_in_prod: 
     simulate = True 
else: 
    pass 

隨着以下錯誤:

File "/usr/local/lib/python2.6/dist-packages/argparse.py", line 2169, in _get_nargs_pattern 
nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) 
TypeError: can't multiply sequence by non-int of type 'str' 

而且同樣errror與'',而不是0

回答

125

由於@Felix Kling suggested使用action='store_true'

>>> from argparse import ArgumentParser 
>>> p = ArgumentParser() 
>>> _ = p.add_argument('-f', '--foo', action='store_true') 
>>> args = p.parse_args() 
>>> args.foo 
False 
>>> args = p.parse_args(['-f']) 
>>> args.foo 
True 
+0

非常感謝Felix Kling – philippe 2011-03-12 23:11:13

58

要創建不需要任何值的選項,請將它的action[docs]設置爲'store_const','store_true''store_false'

例子:

parser.add_argument('-s', '--simulate', action='store_true') 
+0

您好,謝謝您的回答。 我試圖作爲在doc說明: >>> parser.add_argument( ' - 富', '-f',動作= 'store_true') _StoreTrueAction(option_strings = [ ' - 富',' -f '],DEST =' 富」, NARGS = 0,常數= True,則默認=假類型=無,選擇=無, 幫助=無,metavar =無) >>>解析器。 parse_args() 命名空間(FOO = FALSE) >>>打印args.foo 回溯(最近通話最後一個): 文件 「」,1號線,在 AttributeError的:「命名空間」對象有沒有屬性「富」 >>>' 這似乎並沒有工作; 我不知道如何檢索賦值後的值。 感謝您的幫助! – philippe 2011-03-11 09:41:38

+0

@philippe:你忘了將'parser.parse_args()'返回的值綁定到'args' http://stackoverflow.com/questions/5262702/argparse-module-how-to-add-option-without-any -argument/5271692#5271692 – jfs 2011-03-11 10:26:41

+0

@philippe:'args = parser.parse_args()'就像你已經在你的代碼中一樣。你只需要替換註釋行,然後你可以用'args.simulate'來訪問這個值。 – 2011-03-11 10:34:58

相關問題