由于 Apache 网关超时,并且希望向最终用户显示更多信息,我希望能够刷新 PCF 上托管的 python CGI 脚本上的 STDOUT,本质上是提供脚本状态的更新。
我尝试在 python 中启用 -u 标记(#!/usr/python -u 在我的脚本开头)、sys.stdout.flush() 命令,甚至使用 subprocess.call 来执行 perl 脚本设置为刷新到打印一些进度文本的 STDOUT($| = 1; 在 perl 脚本的开头)。此外,我仔细检查了我没有使用任何需要缓冲的 Apache 模块(例如,没有 mod_deflate)。最后,我会提到执行标准 perl CGI 而不是 python CGI 允许 STDOUT 刷新,所以我认为它一定与我的 python/Apache/PCF 配置有关。
我刚刚没有想法,需要一些建议。
使用上述任何方法,我都认为 stdout 会刷新。但是,它们都不起作用!
预先感谢您提供的任何帮助。
最佳答案
您可以在 Python2 代码中使用类似的方法禁用缓冲:
# set stdout as non-buffered
if hasattr(sys.stdout, 'fileno'):
fileno = sys.stdout.fileno()
tmp_fd = os.dup(fileno)
sys.stdout.close()
os.dup2(tmp_fd, fileno)
os.close(tmp_fd)
sys.stdout = os.fdopen(fileno, "w", 0)
这是重新打开没有缓冲区的sys.stdout
(即0
作为第三个参数)。执行此操作后,写入 sys.stdout
的任何内容都不应被缓冲。
关于python - 如何刷新 PCF 上托管的 python CGI 文件中的 STDOUT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57364993/