我是python世界中的新人,我遇到了缓冲问题(但我认为并不完全是python问题)。我想在linux下编写自己的调试器。我需要将stdin,stdout和stderr重定向到不同的描述符,因为我想在调试器控制台中显示show。
所以代码是:
mylib = CDLL("libc.so.6")
self.pid = os.fork()
if (self.pid == 0):
c = os.open("myfile", 1, 0)
os.dup2(c,0)
os.dup2(c,1)
os.dup2(c,2)
mylib.ptrace(ptraceRequest.PTRACE_TRACEME, 0, 0, 0)
os.execl("Fib.out", "Fib")
sys.exit()
else:
print(self.pid)
问题在于execl。我不知道为什么,但流被缓冲(或者我认为缓冲是我的问题的来源:))。因此,我的测试程序Fib.out(它显示斐波那契序列的前五个值,值之间有5秒的中断)仅在Fib.out完成后才可见。
我改变了os.open中的第三个参数 - 文档说0作为第三个参数意味着没有缓冲,但这对我不起作用。当输出重定向到/ dev / pts / 12时 - 一切正常。它看起来像我的问题可以连接到流缓冲区的默认值。
在C中我们有'setvbuf',但在python中我找不到什么相似的东西 - 我只能找到我应该使用os.open的0或1值(作为第三个参数)的信息
也许这是错误的思考问题的方式?你知道在我自己的控制台中显示程序输出有什么好主意吗?