Ich versuche, alle MP3-Dateien im Hintergrund zu starten, indem ich einen Prozess mit der Multiprocessing-Bibliothek erstellen.Prozess beendet nicht
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)
Nach Eingabe der die Code-Exits Befehl „Stop“, aber die Musik noch läuft und ps
auf Ausführen ich sehe 2 Prozess omxplayer die ich dann manuell durch kill <pid>
töten müssen, um die Musik Stopp zu machen.
Ich zuvor versucht, mit der Unterprozessbibliothek und den Prozess mit kill() and terminate()
töten, aber das gleiche Problem aufgetreten ist.
Ich laufe 'omxplayer -o local &' und ich höre kein Audio. Beim Ausführen von 'ps' sehe ich die omxplayer-Prozesse, aber' sudo kill 'tötet sie nicht, sie erscheinen immer noch in nachfolgenden' ps'-Befehlen. Wie sonst gehe ich vor, die mp3 - Dateien im Hintergrund abzuspielen und die Ausführung meines restlichen Python - Codes fortzusetzen (das obige ist nur ein Testskript Ich versuche die Musik im Hintergrund laufen zu lassen und sie mit einem Befehl) –
Betrachtet man http://elinux.org/Omxplayer Ich sehe, dass dies ein Konsolenspieler ist, der mit einer Art Keyboard Handling Event Loop geschrieben ist. Wenn Sie es von Ihrer Shell aus starten, wird es wahrscheinlich im Hintergrund über die SIGTTIN- oder SIGTTOUT-Signale gestoppt, die versuchen, auf ihr steuerndes Terminal zuzugreifen. Möglicherweise müssen Sie diese Anwendung unter https://expect.readthedocs.org/en/stable/ (Python pexpect) ausführen, damit der Prozess über ein Pseudoterminal verfügt, um die eigenen Ressourcenanforderungen (ein Terminal) zu erfüllen. –