2015-02-16 3 views
0

У меня есть следующий цикл с принтом и вызов подпроцессаподпроцесса блокирует печать от выполнения

for file in os.listdir(dir): 
    print(file) 
    subprocess.call(['python', 'otherscript.py', file]) 

otherscript.py печатает некоторые вещи, а также. поэтому, когда я выполнить мой основной сценарий, все, что мой основной сценарий должен напечатать перед вызовом otherscript.py будет распечатываться после otherscript.py называется в последний раз:

  • выход из подпроцесса 1
  • выхода из подпроцесса 2
  • Выход из подпроцесса 3
  • выведен из основного вывода 1
  • от основного выхода 2
  • из главных 3

Как я могу сделать печать перед вызовом подпроцесса?

+0

Я не уверен, что это сработает, но попробуйте добавить ', flush = True' после 'файла' в вызове печати (при условии, что вы используете 3.3+). –

ответ

1

Буфер субпроцесса stdout сбрасывается, тогда дочерний сценарий python завершается, тогда как содержимое, буферизованное функцией print() в родительском объекте, все еще может быть там.

Решение состоит в том, чтобы убедиться, что перед запуском ничего не забуферировано subprocess.call(). См. How to flush output of Python print?

Смежные вопросы