python - 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 内部但没有任何作用来移动打印语句。有人可以帮我理解这里发生了什么吗?
解决方案
您遇到了 Python 的 I/O 缓冲,它会延迟写入以提高效率,尤其是当 CPU 正在运行诸如 gcc 之类的计算密集型进程时。假设您正在运行最近的 Python > 3.3,在您的打印语句中添加“刷新”,如
print("starting build ..", flush=True) 应该会有所帮助。
旧版本 Python 的替代方法可能是调用
导入系统
……
sys.stdout.flush()
在您的打印电话之后。
推荐阅读
- excel - 单元格值相关的下拉菜单(简单的 INDIRECT(CellValue) 不好)
- java - 杰克逊:用新的 JSON 对象包装 JSON 对象
- javascript - 将输入和按钮放在下拉菜单中
- resolution - 在 GEE 中屏蔽不同分辨率的数据集
- php - Sql 注入,我不确定是否还有其他需要知道的
- python - 需要更改尺寸才能计算方程
- git - 合并开发到发布分支
- networking - 是否可以创建自己的位序列,然后将其发送到您选择的网卡?
- javascript - 如何找到一个数组的总和,然后在javascript中检查它是奇数还是偶数?
- python - 如果在 pandas 中记录输出为 NaT,则跳过记录