2

是否有任何函数可以像 PHP 一样执行相同的结果ob_start(myCallbackFunction),并且ob_end_flush()允许我修改 Python 框架(Django/others)中的布局和视图?谢谢!

更新

<?php
ob_start(function($res){
   echo str_replace('test','new string',$res);
});
?>

test
test
test
test

<?php ob_end_flush(); ?>
4

2 回答 2

2

要直接在 Python 中实现此结果,您可以按照此处讨论的方式修补 stdout/stderr;

临时重定向标准输出/标准错误

对于 Django 模板,您只需将调用包装在一个块(或单独的文件)中,并在必要时包含它们。

值得一提的是,这种方法不是很pythonic,你应该考虑一下你正在尝试做什么,并找到一种更pythonic的方式来实现它。如果您告诉我们更多有关您的用例的信息,我们可能会提出更好的方法。

于 2014-03-01T20:59:35.547 回答
1

让我们在 python3 中实现PHPob_start和ob_get_contents函数

输出存储在文件中,也可以使用任何类型的流。

from functools import partial
output_buffer = None
print_orig = print
def ob_start(fname="print.txt"):
    global print
    global output_buffer
    print = partial(print_orig, file=output_buffer)
    output_buffer = open(fname, 'w')
def ob_end():
    global output_buffer
    close(output_buffer)
    print = print_orig
def ob_get_contents(fname="print.txt"):
    return open(fname, 'r').read()

用法:

print ("Hi John")
ob_start()
print ("Hi John")
ob_end()
print (ob_get_contents().replace("Hi", "Bye"))

会打印

嗨约翰再见约翰

于 2018-03-14T08:06:08.523 回答