我只是想了解在處理subprocess.Popen()結果和逐行讀取時,在內存使用情況方面在「背景」中發生了什麼。這是一個簡單的例子。當從管道子進程中讀取行時的內存使用情況python
考慮下面的腳本test.py
上打印「你好」,然後等待10秒,並打印「世界」:
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
它的子進程調用之後,它會打印「你好」,然後等待10秒,直到「世界」的由來然後打印我t,在等待的10年中,「Hello」會發生什麼?它是否存儲在內存中,直到test_sub.py
完成,還是在第一次迭代中被拋棄?
這對這個例子來說可能沒有多大關係,但是當處理真正的大文件時,