python - 如何刷新 PCF 上托管的 python CGI 文件中的 STDOUT?

标签 python python-2.7 apache cgi cloud-foundry

由于 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/

相关文章:

python - Selenium WebDriverException 尝试保存屏幕截图时出错(Python 3.6)

python - 列表中的字符串不接受赋值

java - WSO2 Get UserInfo 返回错误 java null 异常

python - 提取列中的嵌套元素并存储到新列中

python - 是否可以在 Python 中访问 GetLongPathName() Win32 API?

python - 在 Python GUI 中嵌入 Linux 程序?

mysql - Pipeline 不写入 MySQL,但也没有给出错误

PHP 除法返回不同的结果 (Linux/Windows)

linux - 在 Mercurial 存储库中,将工作文件夹更改为子文件夹

python - 获取每行的三个最小值并返回对应的列名