我正在编写一个基于命令行插件的程序,其中插件将在我提供的任何内容之外提供额外的功能。
例如,假设我编写了一个解析图像并存储它们的简单脚本,这就是我所做的一切。然后其他人可以编写一组脚本来操作图像,将他的脚本放在插件中。
将加载插件,用户可以通过在命令行中指定其名称来访问插件。
脚本想要为用户提供其他选项的情况并不少见。 因此,假设在某些年份已经编写了20个不同的插件。
现在,所有作者都希望允许用户提供选项,因此主引擎应该采用用户的选项并将其传递给插件,以便它可以随意处理它们。
为了保持统一,他们可能会同意某些选项应该执行类似的操作。像“-o name”一样,应将输出名称设置为“name”。他们会继续实现他们自己的选项和东西,主引擎不知道(当然,它不应该知道插件做什么)
我正在使用不推荐使用的getopt模块,每当我指定一个未定义的选项时它都会抛出异常。我听说过optparse和argparse,但我不确定这些是否允许用户指定他想要的任何选项而不会抛出异常代码。
我该怎么做才能指定任何命令行选项?
答案 0 :(得分:6)
argparse
允许您使用parse_known_args
方法部分解析参数列表,返回正确解析的内容以及剩余参数的列表。
答案 1 :(得分:1)
您想要的解决方案可能是将命令行参数视为一种进程管道。哪些选项也是选项可能的选择的一部分。
command <global options> sub_command <sub_options> new_sub_command <new_sub_options>
每个命令都会将选项从sys.argv
移出,直到找到一个不理解的选项,或者一个不能成为有效选项的选项,然后它停止解析参数,执行其工作,并将控制权返回给插件-调度。