Python subprocess.Popen + ffmpeg破坏了终端输入。

3
我正在编写一个模块,用于从视频中创建随机截图,并使用subprocess.Popen在并行运行多个命令,但这会导致终端在 Python 程序完成运行后拒绝显示任何输入。但它仍然接受大多数从键盘输入的输入,只是不显示它。

只有当我键入reset命令时,终端才开始正常工作。这发生在 ssh 与 putty 和其他 ssh 客户端甚至是在 Windows 上使用 powershell 的 ssh,以及直接在 VNC 终端上运行时。

但是没有 ssh 直接在 Windows 上运行相同的命令,ssh 就可以正常工作,并且输入是可见的。

这里是演示其情况的 GIF 示例 enter image description here

以下是复制代码:

#!/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()
1个回答

5

经过几周的搜索,我在发布问题后很快就找到了答案。

这个答案就是我一直在寻找的: https://dev59.com/wGw15IYBdhLWcg3wntOh#59148094

不确定是否有更好的方法来处理Popen,但是在ffmpeg命令中添加-nostdin标志解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接