You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python逐行读写文件调用subprocess输出顺序颠倒问题求解

问题根源

顺序错乱是Python文件对象的缓冲写入机制导致的:你调用out.write(lin[0] + '\n')时,内容并没有立刻写入磁盘,而是暂存在程序的内存缓冲区里。后续subprocess直接把输出写入文件描述符,会先落到磁盘;等整个程序运行结束、文件对象被销毁时,缓冲区里的第一列内容才会批量写入,所以就出现了命令输出在前、第一列内容在后的情况。

修正方案

只需要在写入第一列内容后,主动调用flush()方法把缓冲区内容强制刷入磁盘即可,同时补充几个最佳实践优化代码:

import subprocess as sp

# 输出文件也用with上下文管理器,自动处理关闭逻辑
with open(fin) as f, open(fout, 'a') as out:
    while (lin := f.readline().rstrip().split()):
        out.write(lin[0] + '\n')
        # 强制刷新缓冲区,确保第一列内容先写入磁盘
        out.flush()
        cmd = ['cmd', lin[1]]
        # 去掉shell=True更安全,直接传命令列表即可
        sp.run(cmd, stdout=out, stderr=sp.STDOUT)

额外说明

如果你的cmd是Windows系统的cmd命令行调用,需要补充/c参数,即cmd = ['cmd', '/c', '实际要运行的命令', lin[1]],否则命令无法正常执行。

内容的提问来源于stack exchange,提问作者Starter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:15:03