部分解析后使用argcomplete

时间:2019-01-16 17:11:20

标签: python argparse

我的Python脚本使用文件名作为参数,然后根据此文件的内容添加更多参数。这是通过

完成的
  1. 添加固定参数(即filename
  2. 调用parser.parse_known_args()检索固定参数
  3. 根据filename的内容添加一些动态参数
  4. 调用parser.parse_args()解析剩余的参数

现在,我想使用argcomplete启用制表符完成功能。因此,我想在第4步之前致电argcomplete.autocomplete(parser)。但是,由于argcomplete显然只运行到第2步,因此无法正常工作。

所以我的问题是:是否有一种方法可以自动完成在ArgumentParser之后但在parser.parse_known_args()之前添加到parser.parse_args()的参数?

1 个答案:

答案 0 :(得分:0)

查看argcomplete及其工作方式。您可以将其放置在parser.parse_known_args()之后和parser.parse_args()之前,但是这样做并不会给您带来太多好处,因为它运行脚本并检查提供的parser来找出自动完成选项。它不会将任何参数(即到目前为止在命令行上输入的参数)传递给脚本。

当argcomplete被调用时,您的脚本将不知道传递了什么filename以及应该动态添加哪些其他参数。

此外,如果在运行required=True之前已将任何parser.parse_known_args()参数添加到解析器中,则您实际上将永远不会运行argcomplete.autocomplete(parser),因为脚本的执行在到达之前就已经失败了后者(同样,出于自动完成的目的,脚本在不传递任何参数的情况下运行)。