【发布时间】:2016-05-19 22:45:27
【问题描述】:
我只是想了解在处理 subprocess.Popen() 结果并逐行读取时在内存使用方面在“背景”中发生了什么。这是一个简单的例子。
给定以下脚本test.py 打印“Hello”然后等待 10 秒并打印“world”:
import sys
import time
print ("Hello")
sys.stdout.flush()
time.sleep(10)
print ("World")
然后下面的脚本test_sub.py 将调用作为子进程'test.py',将标准输出重定向到管道,然后逐行读取:
import subprocess, time, os, sy
cmd = ["python3","test.py"]
p = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, universal_newlines = True)
for line in iter(p.stdout.readline, ''):
print("---" + line.rstrip())
在这种情况下,我的问题是,当我在执行子进程调用后运行 test_sub.py 时,它会打印“Hello”,然后等待 10 秒,直到“world”出现然后打印它,会发生什么“你好”在这 10 秒的等待中?它会在test_sub.py 完成之前存储在内存中,还是在第一次迭代中被丢弃?
这对于这个例子来说可能无关紧要,但在处理非常大的文件时它确实如此。
【问题讨论】:
标签: python memory subprocess popen ram