我正在使用金字塔,我知道这可能不是做事情的首选方法,但它真的会很酷。我有一堆可以打印到stdout的Python脚本。现在,我想在金字塔中将这些脚本作为请求/响应的一部分来运行。我的意思是,我想捕获脚本的stdout并将其写入模板。
捕获stdout部分非常简单:
import sys
sys.stdout = tbd据我所知,render_to_response不支持其中任何一项:
return render_to_response(’templates/foo.pt’,
{’foo’:1, ’bar’:2},
request=request)知道如何在模板上执行write()操作吗?
发布于 2011-08-02 04:52:23
我可以使用子进程模块来捕获脚本的stdout,而不是直接导入并运行它:
import StringIO
output = StringIO.StringIO()
result = subprocess.call('python', 'myscript.py', stdout=output)
value = output.get_value()
string = render(’templates/foo.pt’,
{'value':value},
request=request)发布于 2011-08-02 02:22:06
您可以将StringIO.StringIO对象传递给标准输出,然后通过上下文字典将其传递给模板,并在模板中的适当时间调用StringIO.StringIO.getvalue():
import sys
def my_view(request):
old_stdout = sys.stdout
new_stdout = StringIO.StringIO()
sys.stdout = new_stdout
# execute your scripts
sys.stdout = old_stdout
return render_to_response('template/foo.pt', {'foo': 1, 'bar': 2, 'stdout': new_stdout},
request=request)然后在模板中:
<html>
<body>
<!-- stuff -->
${stdout.getvalue()}
<!-- other stuff -->
</body>
</html>https://stackoverflow.com/questions/6901846
复制相似问题