首页 > 解决方案 > Python打印乱序

问题描述

我有一个简单的脚本,它首先清理一个目录(删除过时的二进制文件),然后使用 make 构建一堆文件,然后继续做一些其他的事情。我想打印指示性消息,因为脚本即将执行每个步骤,如下所示:打印删除,删除,打印构建,制作......脚本总是在执行删除和制作后打印指示性消息。这是我的脚本。

def build():
      print("deleting stale binaries ...")
      os.system("make clean")
      print("starting build ..")
      os.system("make")
      return;

def main():
    build()

if __name__=="__main__":
    main()

这是我看到的输出:

rm -rf *.so *.a

gcc -Wall -other options file1.c file2.c ... ...构建输出的其余部分...

然后它打印所有的打印语句

删除过时的二进制文件...

开始构建...

我通过将它们以不同的顺序放置在 main 内部但没有任何作用来移动打印语句。有人可以帮我理解这里发生了什么吗?

标签: pythonprinting

解决方案


您遇到了 Python 的 I/O 缓冲,它会延迟写入以提高效率,尤其是当 CPU 正在运行诸如 gcc 之类的计算密集型进程时。假设您正在运行最近的 Python > 3.3,在您的打印语句中添加“刷新”,如

print("starting build ..", flush=True) 应该会有所帮助。

旧版本 Python 的替代方法可能是调用

导入系统

……

sys.stdout.flush()

在您的打印电话之后。


推荐阅读