是否有任何函数可以像 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(); ?>
要直接在 Python 中实现此结果,您可以按照此处讨论的方式修补 stdout/stderr;
对于 Django 模板,您只需将调用包装在一个块(或单独的文件)中,并在必要时包含它们。
值得一提的是,这种方法不是很pythonic,你应该考虑一下你正在尝试做什么,并找到一种更pythonic的方式来实现它。如果您告诉我们更多有关您的用例的信息,我们可能会提出更好的方法。
让我们在 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"))
会打印
嗨约翰再见约翰