Проблема в том, что pMerge.stderr.readlines()
блокируется навсегда, пока процесс не закончится.Перед продолжением он читает все строки.
Поскольку mencoder много пишет в stdout, буфер stdout заполнен, и mencoder ожидает его опустошения, прежде чем продолжить.Таким образом, процесс никогда не заканчивается.
Вот способ сделать то же самое, который не зависнет:
pMerge = subprocess.Popen(mp4merge, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = pMerge.communicate()
print stdout
print stderr
Еще одна опция, позволяющая читать вывод построчно:перенаправить stderr в stdout, а затем в stdout только для чтения (не используйте readlines (), поскольку он блокируется до тех пор, пока не будут прочитаны все строки):
pMerge = subprocess.Popen(mp4merge, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
for line in pMerge.stdout:
print line,
Это перенаправляет stderr в stdout, поэтому ваш буфер не будетзаполнить.