Popen的缓冲区有限

时间:2014-02-25 12:46:14

标签: python memory limit popen

我正在使用python代码启动脚本。此代码应启动在磁盘上写入文件的脚本,并等待脚本完成。

但每当我使用python启动此脚本时,结果文件不会超过65768字节,并且脚本不再响应。这是我在python中使用的内容:

p = subprocess.Popen(command, 
                     shell=True, 
                     stdout=subprocess.PIPE, 
                     stderr=subprocess.STDOUT, 
                     bufsize=-1)
p.wait()

其中command是脚本的命令。

有没有人知道这个问题的解决方案?

谢谢。

1 个答案:

答案 0 :(得分:0)

from time import sleep
p = subprocess.Popen(command, 
                     shell=True, 
                     stdout=subprocess.PIPE, 
                     stderr=subprocess.STDOUT, 
                     bufsize=-1)
output = ''
while p.poll() is None:
    output += p.stdout.readline()+'\n'  # <--- This is your magic
    sleep(0.025)
output += p.stdout.read() # <--- And this is just to get the leftover data
print('Command finished')

p.stdout.close()

@JF就我提供的几乎所有Popen答案发表评论时,除非您要进行utelize,否则不应定义stdout=...stdin=...stderr=...他们。 因为它们会填满缓冲区并挂起你的应用程序。

但如果你这样做,请确保你&#34;点击&#34;从它那里偶尔。