Nach Beendigung eines ffmpeg
Subprozess, gerät das Terminal durcheinander - getippte Zeichen sind unsichtbar! Die Eingabe funktioniert zwar noch, da Befehle ausgeführt werden können, aber die Tastatureingabe wird nicht an das Terminal zurückgesendet.
Shell-Befehl ausgeben reset
setzt alles wieder in den Normalzustand zurück (oder !reset
von ipython aus), so dass ein Workaround das Problem durch den Aufruf von os.system('reset')
innerhalb des Skripts.
Andere Dinge, die ich ausprobiert habe: import curses; curses.initscr()
bevor der Unterprozess gestartet wird und curses.endwin()
nach der Beendigung, was zwar einigermaßen funktionierte, aber andere Dinge kaputt machte. Ein weiteres Problem, das möglicherweise damit zusammenhängt, ist, dass das interaktive Terminal nach dem Starten des Kindprozesses verzögert wird und manchmal die eingegebenen Zeichen nicht erfasst.
Der Code zum Starten des Prozesses sieht folgendermaßen aus:
with open('/tmp/stdout.log', 'w') as o:
with open('/tmp/stderr.log', 'w') as e:
proc = subprocess.Popen([args], stdout=o, stderr=e)
Und später, um sie zu stoppen:
proc.terminate()
proc.communicate()
Was könnte hier schiefgehen?