我正在使用python代码启动脚本。此代码应启动在磁盘上写入文件的脚本,然后等待脚本完成。Popen有限缓冲区
但是,无论何时使用python启动此脚本,结果文件不会超过65768字节,并且脚本不再响应。以下是我在python中使用的内容:
p = subprocess.Popen(command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
bufsize=-1)
p.wait()
其中command是脚本的命令。
有没有人知道这个问题的解决方案?
谢谢。
该脚本是否也回应(如冗长的东西,如写入文件的副本)到标准输出?事实上,你并没有阅读孩子的标准输出,所以如果它在某个时候变满了,孩子将停止一切(挂在例如'print'语句上),包括写入它的输出文件。 – Tibo
@OneOfOne:它不是重复的。这个问题不是关于'MemoryError';这是由于完整的管道缓冲区造成的死锁。 – jfs
如果你不需要子进程的标准输出,那么你可以将它重定向到devnull:'import os; DEVNULL = open(os.devnull,'wb'); subprocess.check_call([script],stdout = DEVNULL,stderr = STDOUT)' – jfs