Я пытаюсь запустить все mp3-файлы в фоновом режиме, создав процесс с использованием библиотеки многопроцессорности.Процесс не заканчивается
import os
import subprocess
from multiprocessing import Process
def music_player():
music_folder = "/home/pi/Music/"
files = os.listdir(music_folder)
for mp3_file in files:
print("playing " + mp3_file)
p = subprocess.Popen(["omxplayer","-o","local",music_folder+mp3_file],
stdout = subprocess.PIPE,
stdin = subprocess.PIPE,
stderr = subprocess.PIPE)
print(p)
print(p.poll())
print(p.pid)
p.wait()
p = Process(target = music_player)
print(p, p.is_alive())
p.start()
print(p.pid)
print(p, p.is_alive())
command = raw_input()
if(command == "stop"):
print("terminating...")
p.terminate()
print(p, p.is_alive())
print(p.exitcode)
После ввода «стоп» команда завершает работу кода, но музыка все еще работает и на выполнение ps
я вижу 2 процесс omxplayer который я тогда придется вручную убить через kill <pid>
сделать музыку остановку.
Я ранее пробовал использовать библиотеку подпроцессов и убил процесс, используя kill() and terminate()
, но та же проблема возникла.
Я запускаю 'omxplayer -o local &' и я не слышу никакого звука. При запуске 'ps' я вижу процессы omxplayer, но' sudo kill 'не убивает их, они все еще появляются в последующих командах' ps'. Как еще я могу поиграть в mp3-файлы в фоновом режиме и продолжить выполнение моего оставшегося кода на Python (выше это всего лишь тестовый скрипт, который я пытаюсь заставить музыку работать в фоновом режиме и быть в состоянии остановить ее с помощью command) –
Глядя на http://elinux.org/Omxplayer, я вижу, что это консольный проигрыватель, написанный с помощью какого-то цикла обработки клавиатуры. Запуск его из оболочки, в фоновом режиме, вероятно, приводит к его остановке через сигналы SIGTTIN или SIGTTOUT ... фоновые процессы, пытающиеся получить доступ к их управляющему терминалу. Возможно, вам нужно запустить это приложение под https://pexpect.readthedocs.org/en/stable/ (Python pexpect), чтобы процесс имел псевдотерминал, чтобы удовлетворить свои собственные требования к ресурсам (терминал). –