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

os.popen与终端执行结果不一致,压力测试脚本文件生成异常求助

问题分析与解决方案

你的问题核心是子进程执行不同步,和WSL环境关系不大。os.popen启动生成测试用例的子进程后,不会自动等待它执行完毕,你紧接着就读取test.txt,这时候gen.py可能还没完成写入操作,自然读不到内容。

解决方案1:使用官方推荐的subprocess模块(更可靠)

os.popen是比较老旧的API,Python官方建议用subprocess来处理子进程,它能更好地控制进程的执行和同步。修改你的stress.py如下:

import subprocess

# 执行gen.py,将输出写入test.txt,并等待进程完成
subprocess.run(
    ['python3', 'gen.py'],
    stdout=open('test.txt', 'w'),
    check=True  # 如果gen.py执行出错会抛出异常,方便调试
)

# 读取并输出test.txt的内容
with open('test.txt', 'r') as f:
    print(f.read().strip())

解决方案2:修复os.popen的同步问题

如果你坚持要用os.popen,需要手动等待子进程执行完毕。可以通过读取os.popen返回的文件对象(即使没有输出)来触发等待:

import os

# 启动gen.py进程,并等待它执行完成
proc = os.popen('python3 gen.py > test.txt')
proc.read()  # 读取输出会阻塞直到进程结束
proc.close()

# 现在再读取test.txt就有内容了
print(*os.popen('cat test.txt').readlines())

为什么原来的代码不工作?

当你调用os.popen('python3 gen.py > test.txt')时,Python只是启动了一个后台子进程,不会等待它完成。这时候你立刻执行cat test.txt,操作系统可能还没来得及把gen.py的输出写入文件,所以读取到的是空内容。

内容的提问来源于stack exchange,提问作者Василий Пупкин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:22:40