我正在使用Argparse来解析我的Python函数的shell输入。但麻烦的是,该脚本首先读入一个文件,该文件部分地确定了Argparse可用的参数类型(它是一个包含用户指定输出数据标准的JSON文件)。但在将这些参数添加到我的解析器之前,我想先读取一些与文件读取本身相关的参数(例如是否修复输入文件的格式)。有点像这样:
当我尝试在初始输入和添加更多键后两次运行
然后我尝试仅解析“settings”部分,如下所示:
这似乎是有效的。但当我添加我的其他键时,事情就会出问题:
如果我为键中的任何参数解析任何输入,Argparse 会抱怨我做出了“无效选择:[…](从 'settings' 中选择)”。现在我不明白为什么我必须从 "settings" 中选择;文档说解析
test.py (fix_formatting=True, **more arguments added later)
当我尝试在初始输入和添加更多键后两次运行
args = parser.parse_args()
时,事情就会变得混乱:Argparse会非常可预见地抱怨一些用户输入是未识别的参数:
。我想我可以使用subparsers来达到这个目的。
因此,我尝试了各种变化(尽可能按照文档中的示例):
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='sub-command help')
settingsparser = subparsers.add_parser('settings') #i want a subparser called 'settings'
settingsparser.add_argument('--fix_formatting', action='store_true') #this subparser shall have a --fix_formatting
然后我尝试仅解析“settings”部分,如下所示:
settings=parser.parse_args(['settings'])
这似乎是有效的。但当我添加我的其他键时,事情就会出问题:
keys=['alpha','beta','gamma','delta']
for key in keys:
parser.add_argument("--"+key, type=str, help="X")
args = parser.parse_args()
如果我为键中的任何参数解析任何输入,Argparse 会抱怨我做出了“无效选择:[…](从 'settings' 中选择)”。现在我不明白为什么我必须从 "settings" 中选择;文档说解析
仅包含主解析器和由命令行选择的子解析器的属性(而不包括任何其他子解析器)
我在这里理解错了什么?
如果这是错误的方法,那么如何在解析另一个位之前解析一个位?
非常感谢您的任何帮助!