Python无法打印无缓冲

时间:2014-12-11 07:02:25

标签: python python-2.7 buffer stdout

我正在使用集群并使用Python进行一些计算。

但是,python脚本在完成或被杀之前不会打印任何内容。

我已经检查了一些方法(来自Disable output buffering

  1. 使用-u命令行开关
  2. 在每次写入后刷新的对象中包裹sys.stdout
  3. 设置PYTHONUNBUFFERED env var
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
  5. 但这些都不起作用。

    python版本是2.7.8,2.7.3和2.4.2(系统上有三个版本,在运行之前必须放入PATH)

    另外,因为群集使用NFS,所以我在多台机器中拥有完全相同的python。但是在一台机器上,它打印无缓冲(至少在结束前打印一些东西),没有任何设置(没有PYTHONUNBUFFERD)。在其他机器上它没有,这让我更加困惑。

    我的测试脚本是

    import os,sys,time
    for i in range(100):
        print(i)
        time.sleep(1)
    

    import os,sys,time
    sys.stdout = os.fdopen(sys.stdout.fileno(),'w',0)
    for i in range(100):
        print(i)
        time.sleep(1)
    

    import os,sys,time
    for i in range(100):
        print(i)
        sys.stdout.flush()
        time.sleep(1)
    

    有没有其他方法可以使Python打印无缓冲(或者更合理地缓冲,比如缓冲一行)而无需修改Python代码(因为它们有很多)?感谢。

0 个答案:

没有答案