Я писал модуль для создания случайных снимков экрана из видео и использовал 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()
После нескольких недель поиска, наконец, нашел ответ на этот вопрос сразу после того, как я разместил вопрос
этот ответ — это то, что я искал https://stackoverflow.com/a/59148094
не уверен, что есть лучший способ справиться с этим с помощью Popen, но добавление флага
-nostdin
к команде ffmpeg устранило проблему, с которой я столкнулся