2011-08-18 63 views
3

我正在编写一个基于命令行插件的程序,其中插件将提供任何我提供的额外功能。Python和任意命令行选项

因此,例如,假设我编写了一个简单的脚本来解析图像并存储它们,这就是我所做的。然后,其他人可以编写一组脚本来操纵图像,并将其脚本放入插件中。

该插件将被加载,用户可以通过在命令行中指定其名称来访问该插件。

脚本想要为用户提供其他选项的情况并不少见。所以假设在某些年份,已经写了20个不同的插件。

现在,所有作者都希望允许用户提供选项,因此主引擎应该接受用户的选项并将它们传递给插件,以便它能够处理它们,无论它是否需要。

为了保持统一,他们可能会同意某些选项应执行类似的操作。像“-o名称”应该将输出名称设置为“名称”。然后他们会执行他们自己的选项和主要引擎不知道的东西(当然,它不应该知道插件做什么)

我使用不推荐的getopt模块,它会抛出每当我指定一个未定义的选项时都会有异我听说过optparse和argparse,但我不确定这些是否允许用户在没有代码抛出异常的情况下指定他想要的任何选项。

我该怎么做才能指定任何命令行选项?

回答

6

​​允许您使用parse_known_args方法部分解析参数列表,并返回正确解析的内容以及剩余参数的列表。

+0

我只是抬起头来argparse的文档,发现,它甚至说:“有时,一个脚本只能分析少数的命令行参数,传递其余的参数上的脚本或程序。”大声笑 – MxyL

1

您想要的解决方案可能是将命令行参数视为一种进程管道。哪些选项也是选项的一部分。

command <global options> sub_command <sub_options> new_sub_command <new_sub_options> 

每个命令将转向选项关闭的sys.argv,直到它找到一个不理解,或者一个可以不是一个有效的选项,然后停止解析参数,它的工作,并将控制权返回给插件-调度。