我正在用python写一个CLI应用程序,通过一种相当复杂的命令行语言来使用。这个想法与找到(1)非常相似,可以说它具有相同的属性。Python:解析命令行
目前,解析器是使用手工EBNF描述语言完全手写的。问题是这种语言使用起来非常尴尬,因为我必须将所有东西都写成python结构。我也觉得我的程序由于解析而仍然过于臃肿。
是否有任何使用易用的lib,以及用于命令行解析的真正描述语言(输入为字符串/文档)?从语法树中,我想直接将每个项目映射到一个类实例。当然,我不想要标记器,或者至少标记器必须从命令行参数直接映射到标记。
感谢您的所有建议!
UPDATE:我的程序的全部要点是生成对象,并通过任何数量的过滤器(可能unpure/effectful动作)通过他们可能会或可能不会输出再次对象,或另一甚至可能会输出对象类型。从find(1)中显然可以看出总体思路。一个命令行示例如下:
~/picdb.py -sqlselect 'select * from pics where dirname like "testdir%"' -tagged JoSo -updateFromFile [ -resx +300 -or -resX +200 -resY +500 ] -printfXml '<jpegfile><src>%fp</src><DateTimeOriginal>%ed</DateTimeOriginal><Manufacturer>%eM</Manufacturer><Model>%em</Model></jpegfile>%NL'
[argparse](http://docs.python.org/library/argparse.html#module-argparse)(python 2.7+)会满足您的需求吗? – Aufwind 2012-04-28 14:00:57
除了@Aufwind的评论 - 你不需要*拥有python 2.7或更新的用户argparse。它适用于老版本的python - 你只需要自己安装(而不是被包含在标准库中)。 – mgilson 2012-04-28 15:52:31
我认为,如果你描述了你的命令行(或者至少给出了一个或两个例子),我们可能会看到这是否是一个候选人/ optparse ... – mgilson 2012-04-28 15:53:41