我有一個腳本,裏面有一長串可選參數,其中最近添加了通過文件傳遞參數的選項。代碼如下:我首先添加from_file
參數,然後parse_known_args
。除了-h
標誌以外,一切正常。調用此標誌時的輸出僅指調用parse_known_args
之前添加的參數。ArgumentParser -h在parse_known_args之後沒有打印選項
問題:如何獲得幫助選項以識別parse_known_args
調用之後的所有參數?
optional arguments:
-h, --help show this help message and exit
Meta Variables:
--to_file [TOINITFILE]
write flag values to text file (default: None)
--from_file FROMINITFILE
reads flag values from file (default:)
編輯:增加了一些細節(如意見建議),以我的代碼,爲什麼我打電話parse_known_args
:
-
使用
- 我創建解析器並添加兩個參數:
from_file
和to_file
- 解析參數。如果
from_file
存在,我創建第二個解析器並讀取輸入變量。 - 繼續向解析器添加參數。默認值是我傳遞第二個解析器和默認值的函數。
-h
標誌時
# grab values from file_parser or default
def getInitVar(variable, parser, default, varList=False):
if parser:
if varList:
return [o.strip() for o in parser.get('constants',variable).split(",")] if parser.has_option('constants',variable) else default
else:
return parser.get('constants',variable) if parser.has_option('constants',variable) else default
else:
return default
# first parser for to/from file parameters
parser = argparse.ArgumentParser(
description='', prefix_chars='-+', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
# Meta variables
group = parser.add_argument_group('Meta Variables', '')
group.add_argument('--to_file', dest='toinitfile', nargs='?', const=DEF_INIT_FILE, default=None,
help='write flag values to text file')
group.add_argument('--from_file', type=str, dest='frominitfile', default='',
help='reads flag values from file')
args, remaining_argv = parser.parse_known_args()
# create second parser for reading from files
if args.frominitfile:
conf_parser = SafeConfigParser()
conf_parser.read(args.frominitfile)
else:
conf_parser = None
group = parser.add_argument_group('Some Group', 'blah blah')
group.add_argument('-someFlag', dest='somevar', default=getInitVar('corpdb', conf_parser, DEF_VAR),
help='Some help.')
....
輸出
編輯:最後搞清楚如何做到這一點,公佈下面的答案。
選項只有當你調用'parse_args'或'parse_known_args'處理。當然,在這之後你不會看到任何添加的參數......當你解析命令行時,它們不存在! – larsks
@larsks你有什麼建議如何解決這個問題? – Sal
直到完全配置好ArgumentParser之後才調用任何'parse'函數。 – larsks