【发布时间】:2012-05-09 00:02:06
【问题描述】:
我正在用 python 编写一个 CLI 应用程序,它通过一种相当复杂的命令行语言来使用。这个想法与 find(1) 非常相似,可以说具有相同的属性。
目前,解析器完全是使用手工制作的 EBNF 描述语言手写的。问题是这种语言使用起来非常尴尬,因为我必须将所有东西都写成 python 结构。我也觉得我的程序因为解析的原因还是太臃肿了。
是否有任何库具有易用性和用于命令行解析的真实描述语言(作为字符串/文档输入)?从语法树中,我想直接将每个项目映射到一个类实例。自然,我不想要分词器,或者至少分词器必须直接从命令行参数映射到令牌。
感谢所有建议!
更新:我的程序的重点是生成对象并将它们通过任意数量的过滤器(可能是不纯/有效的操作),这些过滤器可能会或可能不会再次输出对象,甚至可能另一种类型的输出对象。总体思路显然是从 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 (python 2.7+) 能满足您的需求吗?
-
除了@Aufwind 的评论——对于用户argparse,您不需要需要拥有python 2.7 或更新版本。它适用于旧版本的 python - 你只需要自己安装(而不是包含在标准库中)。
-
我认为如果你描述了你的命令行(或者至少给出了一个或两个例子),我们也许可以看看这是否是 argparse/optparse 的候选者......
-
@mgilson:谢谢,好点子,我会更新我的帖子并期待更好的答案,而不仅仅是反问:)