在SO上已经多次问过这个问题(例如here),但是还没有真正的答案。
我正在写一个简短的命令行工具来渲染模板。它是使用Makefile固定的:
i = $(wildcard *.in)
o = $(patsubst %.in, %.out, $(t))
all: $(o)
%.out: %.in
./script.py -o $@ $<
在此虚拟示例中,Makefile解析每个.in
文件以生成一个.out
文件。这对我来说非常方便,make
因为在此脚本之前和之后,我还有许多其他操作要触发。此外,我想保持尽可能的吻。
因此,我想使我的工具保持简单,愚蠢并使用语法分别处理每个文件
script -o out in
我的脚本使用以下内容:
#!/usr/bin/env python
from jinja2 import Template, nodes
from jinja2.ext import Extension
import hiyapyco
import argparse
import re
...
问题是每次执行要花费我大约1.2秒的时间(大约60毫秒用于处理,大约1140毫秒用于import指令):
$ time ./script.py -o foo.out foo.in
real 0m1.625s
user 0m0.452s
sys 0m1.185s
我的100个文件的Makefile的整体执行是荒谬的:〜100个文件x 1.2s = 120s。
这不是解决方案,但应该是解决方案。
我可以使用什么替代方法?
编辑
我喜欢Python,因为它的语法易读并且具有社区规模。在这种特殊情况下(命令行工具),我不得不承认Perl仍然是一个不错的选择。用Perl(也是一种解释语言)编写的相同脚本的速度(使用Text::Xslate
)大约快12倍。
无论如何,我都不想推广Perl,我只是想用Python解决我最大的问题:由于导入时间很短,它还不适合用于简单的命令行工具。
这并不是一件容易的事,但是您可以将程序变成一个位于后台并处理命令以处理文件的程序。
另一个程序可以向其提供处理命令,从而使真正的开始变得非常容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句