【发布时间】:2016-06-15 11:24:48
【问题描述】:
我正在使用 Argparse 来解析我的 Python 函数的 shell 输入。
棘手的部分是此脚本首先读取一个文件,该文件部分确定 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')。现在我不明白为什么我必须从“设置”中进行选择;文档说解析
将只包含由命令行选择的主解析器和子解析器的属性(而不是任何其他子解析器)
我在这里的理解错误是什么?
如果这是错误的方法,如何在另一位之前解析一位输入?
非常感谢任何帮助!
【问题讨论】:
标签: python parsing parameter-passing argparse