我正在使用Argparse解析shell输入到我的Python函数。按位解析argparse输入
棘手的部分是,该脚本首先读入一个文件,该文件部分确定Argparse可用的参数类型(它是包含用于指定要输出的数据的条件的JSON文件)。
但是在将这些参数添加到我的解析器之前,我想阅读一些与读取文件相关的参数。 (例如是否修复输入文件的格式)。有点儿像这样:
test.py (fix_formatting=True, **more arguments added later)
当我尝试运行args = parser.parse_args()
两倍,初始输入后,加入更多的键后,事情土崩瓦解:Argparse相当可预见的抱怨,一些用户输入的是unrecognized arguments:
。我想我可能会用subparsers来达到目的。
于是,我的变化(以下在docs是最好的,我可以的例子):
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=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抱怨我做的invalid choice: [...] (choose from 'settings')
。现在我不明白为什么我必须从“设置”中进行选择;该文件说,该分析
将只包含这是通过在命令行中选择(而不是任何其他subparsers)主分析器和子分析器属性
什么是我的错误在这里了解?
如果这是错误的方法,如何解决一位输入之前的另一位呢?
任何帮助非常感谢!
非常感谢!我想我完全误解了subparsers的概念以及部分解析。感谢澄清... – patrick