wim*_*wim 14 python terminal subprocess ffmpeg
终止ffmpeg子进程后,终端搞砸了 - 键入的字符是不可见的!输入仍可用于执行命令,但键盘输入不会回显到终端.
发出shell命令reset会使一切恢复正常(或!reset从ipython中恢复),因此解决问题的方法是os.system('reset')在脚本内部调用.
我尝试过的其他事情: import curses; 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)
Run Code Online (Sandbox Code Playgroud)
后来阻止它:
proc.terminate()
proc.communicate()
Run Code Online (Sandbox Code Playgroud)
这可能会出错?
wim*_*wim 16
更改脚本以便proc.terminate()不使用.您可以ffmpeg更礼貌地停止子流程
proc.send_signal(signal.SIGINT)
proc.wait()
Run Code Online (Sandbox Code Playgroud)
这允许ffmpeg有机会编写恢复终端所需的任何转义序列.
编辑:后来发现 - 另一个使ffmpeg行为更好的提示Popen是提供一个subprocess.PIPE或open(os.devnull)在stdin句柄中.否则,它似乎试图从父的stdin获取输入,这可能导致奇怪的终端行为.正在运行的ffmpeg进程正在侦听'?' 和stdin上的'q'输入.
| 归档时间: |
|
| 查看次数: |
3183 次 |
| 最近记录: |