Подпроцесс Python.Popen + ffmpeg прерывает ввод терминала

Я писал модуль для создания случайных снимков экрана из видео и использовал subprocess.Popen для параллельного запуска нескольких команд, но это приводит к тому, что терминал отказывается отображать какие-либо входные данные после завершения работы программы python. Но он по-прежнему принимает большинство вводов с клавиатуры, просто не отображает их.

Только если я наберу команду reset, терминал начнет работать нормально. Это произошло на ssh с замазкой и другими ssh-клиентами, даже на ssh с powershell в Windows и непосредственно на терминале с VNC.

Но без ssh, непосредственно выполняющего ту же команду в Windows, ssh работает нормально, и входные данные видны

вот пример gif того, что происходит введите здесь описание изображения

и код для его воспроизведения

#!/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()

См. также:  Scala Spark Read from AWS S3 - com.amazonaws.SdkClientException: невозможно загрузить учетные данные из конечной точки службы
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Barney Suit

    После нескольких недель поиска, наконец, нашел ответ на этот вопрос сразу после того, как я разместил вопрос

    этот ответ — это то, что я искал https://stackoverflow.com/a/59148094

    не уверен, что есть лучший способ справиться с этим с помощью Popen, но добавление флага -nostdin к команде ffmpeg устранило проблему, с которой я столкнулся

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: