python, итерация по subprocess.Popen ()stdout/stderr

Подобных сообщений много, но ответа не нашел.

В Gnu/Linux с модулями Pythonи subprocessя использую следующий код для перебора stdout/sdterr команды, запущенной с подпроцессом:

class Shell:
    """ 
    run a command and iterate over the stdout/stderr lines
    """

    def __init__(self):

        pass

    def __call__(self,args,cwd='./'):

        p = subprocess.Popen(args,
                cwd=cwd, 
                stdout = subprocess.PIPE,
                stderr = subprocess.STDOUT,
                )

        while True:

            line = p.stdout.readline()
            self.code = p.poll()

            if line == '':
                if self.code != None:
                    break
                else:
                    continue

            yield line

#example of use
args = ["./foo"]
shell = Shell()
for line in shell(args):
     #do something with line
     print line,

Это работает нормально... за исключением случаев, когда выполняется команда python, например `args = ['python','foo.py'], и в этом случае вывод не сбрасывается, а печатается только тогда, когда команда законченный.

Есть ли решение?

7
задан user744629 30 July 2012 в 20:15
поделиться