如何禁用缓存输出的进程,这是使用execl在Python中启动的?

时间:2014-04-14 15:46:56

标签: python c linux debugging buffer

我是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值(作为第三个参数)的信息

也许这是错误的思考问题的方式?你知道在我自己的控制台中显示程序输出有什么好主意吗?

0 个答案:

没有答案