popen的困惑

popen的困惑

遇到个popen的问题
用popen打开了一个程序abc
如果abc不结束就不能从popen得到abc的输出
请问这怎么解决呢

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python

import os
a,b = os.popen2('/tmp/abc')
print b.read()

abc.c

[Copy to clipboard] [ - ]
CODE:
int main()
{
    while(1) {
        sleep(1);
        printf("yes\n");
    }
}

该成这样就可以了

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python

import os
a,b = os.popen2('/tmp/abc')
a.close()
print b.read()

help b.read()
如果不带参数,read会一直接收直到遇到EOF(也就是进程结束,关闭输出的时候)


QUOTE:
原帖由 njmarshal 于 2007-3-4 09:32 发表
该成这样就可以了

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python

import os
a,b = os.popen2('/tmp/abc')
a.close()
print b.read()


还是不行阿


QUOTE:
原帖由 growup 于 2007-3-4 11:02 发表
help b.read()
如果不带参数,read会一直接收直到遇到EOF(也就是进程结束,关闭输出的时候)

有道理
我看看怎么解决
谢谢
我用b.readline(1)也不行
n.readline似乎没有要求一定要读到EOF
为什么还不行呢
这样就好了

[Copy to clipboard] [ - ]
CODE:
#include <stdio.h>
int main()
{
    while(1) {
        sleep(1);
        printf("yes\n");
        fflush(stdout);
    }
}



QUOTE:
原帖由 growup 于 2007-3-5 10:45 发表
这样就好了

[Copy to clipboard] [ - ]
CODE:
#include <stdio.h>
int main()
{
    while(1) {
        sleep(1);
        printf("yes\n");
        fflush(stdout);
    }
}


谢谢
试了一下
果然可以

但abc.c只是个代替复杂程序的小例子
我不能保证真实的程序里也有fflush(stdout)
有没有什么办法让不带fflush()的C程序也可以正确输出吗?
用subprocess

[Copy to clipboard] [ - ]
CODE:
#!/bin/python

import subprocess
from subprocess import Popen
p2 = Popen("/tmp/abc")
output = p2.communicate()[0]



QUOTE:
原帖由 ayaa 于 2007-3-6 21:13 发表
用subprocess

[Copy to clipboard] [ - ]
CODE:
#!/bin/python

import subprocess
from subprocess import Popen
p2 = Popen("/tmp/abc")
output = p2.communicate()[0]


谢谢
可以了
bow~~~