python - Python subprocess.Popen + ffmpeg 中断终端输入
问题描述
我正在编写一个模块来从视频中创建随机屏幕截图,并用于subprocess.Popen
并行运行多个命令,但这会导致终端在 python 程序完成运行后拒绝显示任何输入。但它仍然接受从键盘给出的大多数输入,只是不显示它。
只有当我输入reset
命令终端才能正常工作这发生在 ssh 和 putty 和其他 ssh 客户端,甚至 ssh 和 windows 上的 powershell 并直接在终端上运行 VNC
但是没有 ssh 直接在 windows 上运行相同的命令 ssh 工作正常并且输入是可见的
和复制它的代码
#!/usr/bin/env python3.8
from subprocess import Popen
def create_screenshots():
commands = ['ffmpeg -hide_banner -loglevel panic -ss 329 -i "/home/user/file.mkv" -y -vframes 1 "/home/user/file.329.frame.png"',
'ffmpeg -hide_banner -loglevel panic -ss 312 -i "/home/user/file.mkv" -y -vframes 1 "/home/user/file.312.frame.png"',
'ffmpeg -hide_banner -loglevel panic -ss 533 -i "/home/user/file.mkv" -y -vframes 1 "/home/user/file.533.frame.png"',
'ffmpeg -hide_banner -loglevel panic -ss 444 -i "/home/user/file.mkv" -y -vframes 1 "/home/user/file.444.frame.png"',
'ffmpeg -hide_banner -loglevel panic -ss 411 -i "/home/user/file.mkv" -y -vframes 1 "/home/user/file.411.frame.png"',
'ffmpeg -hide_banner -loglevel panic -ss 413 -i "/home/user/file.mkv" -y -vframes 1 "/home/user/file.413.frame.png"']
screenshot_files = []
processes = [Popen(command, shell=True) for command in commands]
for process in processes:
process.wait()
return screenshot_files
create_screenshots()
解决方案
经过数周的搜索,在我发布问题后终于找到了答案
这个答案就是我一直在寻找的 https://stackoverflow.com/a/59148094
不确定是否有更好的方法来使用 Popen 处理此问题,但向-nostdin
ffmpeg 命令添加标志解决了我遇到的问题
推荐阅读
- c++ - c ++文件处理,在文件中读取
- python - 将数据从 influxdb 导出到数据帧,然后使用 python 将其存储在 mf4 文件中
- opengl - Opengl 实例化批处理
- html - 向使用径向渐变创建的蒙版图像添加边框
- bash - 对所有子目录中的文件进行分析并在每个子目录中保存输出?
- java - 带有 embedmongo 的弹簧靴
- javascript - 如何在没有用户干预的情况下使用 JavaScript 或 jQuery 播放声音?
- c - 即使禁用了 ASLR 和堆栈编译器保护器,Linux 上的 ROP 也会失败
- python - 如何自动化 web whatsapp 以使用 win32 api 和 pyautogui 发送消息?
- java - 错误:尝试在空对象引用 (Tesseract) 上调用虚拟方法“java.lang.String java.lang.Object.toString()”