Python Popen - ждать против общения против CalledProcessError

продолжающийсяиз моего предыдущего вопроса Я вижу, что для получения кода ошибки процесса, который я породил через Popen в python, мне нужно вызвать wait () или общаться () (который можно использовать для доступа к атрибутам stdout и stderr Popen):

app7z = '/path/to/7z.exe'
command = [app7z, 'a', dstFile.temp, "-y", "-r", os.path.join(src.Dir, '*')]
process = Popen(command, stdout=PIPE, startupinfo=startupinfo)
out = process.stdout
regCompressMatch = re.compile('Compressing\s+(.+)').match
regErrMatch = re.compile('Error: (.*)').match
errorLine = []
for line in out:
    if len(errorLine) or regErrMatch(line):
        errorLine.append(line)
    if regCompressMatch(line):
        # update a progress bar
result = process.wait() # HERE
if result: # in the hopes that 7z returns 0 for correct execution
    dstFile.temp.remove()
    raise StateError(_("%s: Compression failed:\n%s") % (dstFile.s, 
                       "\n".join(errorLine)))

тем не мениедокументы предупредить, чтоwait() может зайти в тупик (когда stdout = PIPE, как здесь), в то время какcommunicate() может переполниться. Так:

что правильно использовать здесь? Обратите внимание, что я использую вывод

Как именно я должен использовать общаться? Будет ли это:

process = Popen(command, stdout=PIPE, startupinfo=startupinfo)
out = process.communicate()[0]
# same as before...
result = process.returncode
if result: # ...

не уверен насчет блокировки и ошибок памяти

Есть ли лучший / более питонный способ решения проблемы? я не думаю, чтоsubprocess.CalledProcessError илиsubprocess.check_call/check_output применить в моем случае - или они?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не писал код, я текущий сопровождающий, следовательно, вопрос 3.

Связанные с:

Python popen команда. Подождите, пока команда не закончитсяПроверьте код возврата команды, когда подпроцесс вызывает исключение CalledProcessErrorждать процесса, пока все подпроцесс не закончится?

Я на Windows, если это имеет значение - Python 2.7.8

Должен быть один - и желательно только один - очевидный способ сделать это

Ответы на вопрос(1)

Ваш ответ на вопрос