如何设置Popen缓冲区的大小或清除它?我有两个脚本:ty2.py只做两次打印
#import sys
a, b = b'123', '123'
print(a)
print(b)
#print(sys.getsizeof(a)) #36
#print(sys.getsizeof(b)) #52
和t1.py使用popen调用t2.py脚本
import subprocess as sp
#pipe = sp.Popen(['stdbuf', '-o0', '-i0', '-e0', 'python3', '-u', 't2.py'], stdout=sp.PIPE, bufsize=2, universal_newlines=True)
pipe = sp.Popen(['python3', 't2.py'], stdout=sp.PIPE, bufsize=2)
#pipe.stdout.flush() #also doesn't work
print(pipe.stdout.read())
输出:b“ b'123'\ n123 \ n”
我的数据应该是实时的,我只需要输出最后的打印。可能吗?如果我将bufsize设置为0、1、2或什至200,则没有区别:它读取两个打印(我知道,0表示没有缓冲区,但是我看到的是完全缓冲)。我需要限制它。 stdbuf和-u也无效。
答案 0 :(得分:0)
如果您只想要最后一次打印,则可以尝试:
pipe = subprocess.Popen([<YOUR COMMANDS>], stdout=subprocess.PIPE, shell=True,
universal_newlines=True).communicate()[0]
print(pipe.rstrip().split('\n')[-1])
当universal_newlines=True
时,该流将为文本流,否则为字节流。我不确定是否要使用该选项。