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,提问作者Василий Пупкин
相关产品推荐
相关产品推荐

