我有一个一般性的问题有关popen方法(和所有相关的功能),适用于所有的操作系统,当我写一个python脚本或一些C代码,并从控制台运行生成的可执行文件(赢或Linux),我马上就可以看到输出从过程。 但是,如果我运行相同的可执行文件与标准输出重定向到管道分叉过程中,输出缓冲器的地方,通常可以达到4096个字节之前它被写入到父进程可以读取它的管。
下面的python脚本将在1024字节的块中生成输出
import os, sys, time
if __name__ == "__main__":
dye = '@'*1024
for i in range (0,8):
print dye
time.sleep(1)
下面的python脚本将执行前面的脚本并尽快读取输出,因为它通过字节来管,字节
import os, sys, subprocess, time, thread
if __name__ == "__main__":
execArgs = ["c:\\python25\\python.exe", "C:\\Scripts\\PythonScratch\\byte_stream.py"]
p = subprocess.Popen(execArgs, bufsize=0, stdout=subprocess.PIPE)
while p.returncode == None:
data = p.stdout.read(1)
sys.stdout.write(data)
p.poll()
调整操作系统的路径。 当在这种配置中运行时,输出将不会,出现在1024块,但4096块尽管POPEN命令的缓冲器大小被设置为0(这是默认反正)。 谁能告诉我如何改变这种行为?有没有什么办法可以强制操作系统处理从分叉过程的输出以同样的方式,当它从控制台运行的?,即刚刚经历养活数据无缓冲?