Терминальный текст становится невидимым после завершения подпроцесса

После завершения подпроцесса ffmpeg терминал сбивается с толку - набранные символы невидимы! Ввод по-прежнему работает, команды могут выполняться, но ввод с клавиатуры не передается терминалу.

Выполнение команды оболочки reset возвращает все в нормальное состояние (или !reset из ipython), поэтому проблема заключается в вызове os.system ('reset') внутри сценария.

Другие вещи, которые я пробовал: импорт проклятий; curses.initscr () перед порождением подпроцесса и curses.endwin () после завершения, которые несколько работали, но нарушали другие вещи. Другая, возможно, связанная проблема заключается в том, что после порождения дочернего процесса интерактивный терминал становится медленным и иногда не может захватывать введенные символы.

Код для запуска процесса выглядит так:

with open('/tmp/stdout.log', 'w') as o:
    with open('/tmp/stderr.log', 'w') as e:
        proc = subprocess.Popen([args], stdout=o, stderr=e)

И позже, чтобы остановить его:

proc.terminate()
proc.communicate()

Что здесь может быть не так?

14
задан wim 21 November 2016 в 17:43
поделиться