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

2024-04-28 15:38:20 发布

您现在位置:Python中文网/ 问答频道 /正文

由于Apache网关超时,并且希望向最终用户显示更多信息,我希望能够刷新PCF上托管的python CGI脚本上的STDOUT,基本上提供脚本状态的更新。你知道吗

我尝试过在python(#)中启用-u标记!/usr/python-u在我的脚本的开头),系统标准冲洗()命令,甚至使用子流程调用执行设置为flush to STDOUT的perl脚本,该脚本打印一些进度文本($|=1;在perl脚本的开头)。此外,我已经仔细检查了我没有使用任何需要缓冲的Apache模块(例如,没有mod\u deflate)。最后,我要提到的是,执行标准perl CGI而不是python CGI允许STDOUT刷新,因此我认为它一定与python/Apache/PCF配置有关。你知道吗

我对这里的想法不太了解,想听听你的建议。你知道吗

使用以上任何一种方法,我都会认为stdout会被刷新。但是,他们都没有成功!你知道吗

谢谢你的帮助。你知道吗


Tags: 标记命令脚本信息网关标准状态usr
1条回答
网友
1楼 · 发布于 2024-04-28 15:38:20

您可以在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作为第三个arg)。这样做之后,任何写入sys.stdout的内容都不应该被缓冲。你知道吗

相关问题 更多 >