Seite 1 von 1

os.system

Verfasst: Donnerstag 10. Januar 2019, 21:42
von toper3902
Hallo zusammen.
Ich habe ein Programm geschrieben dass eine mp3 datei abspielen soll.

Code: Alles auswählen

while True:
	Pfad = input("Wo befindet sich die mp3 Datei? ")
	os.system(Pfad)
Mein Problem:
Ich möchte dass die mp3 Datei abgespielt wird und dann direkt wieder neu nach einem Pfad gefragt wird.
Im Moment muss ich das wiedergabefenster erst manuell schließen befor die schleife wiederholt wird.
Weiß jemand wie man das Beheben kann?

Re: os.system

Verfasst: Donnerstag 10. Januar 2019, 21:45
von sparrow
Du rufst einfach nur eine Datei über das Betriebssystem auf. Dein Script hat keine Ahnung, was damit passiert. Im Zweifelsfall nichts.

Wenn du so etwas steuern willst, brauchst du eine Python-Bibliothek, die das kann. Wenn ich mich recht erinnere, kann pygame so etwas.

Re: os.system

Verfasst: Donnerstag 10. Januar 2019, 21:48
von toper3902
Das Programm Funktioniert!
Aber die Schleife wiederhohlt sich eben erst wenn ich das wiedergabefenster schließe.
Ich möchte aber das es sich auch so wiederholt

Re: os.system

Verfasst: Donnerstag 10. Januar 2019, 22:01
von nezzcarth
toper3902 hat geschrieben: Donnerstag 10. Januar 2019, 21:48 Das Programm Funktioniert!
Ich möchte ja nicht negativ erscheinen, aber das ist mehr oder weniger Zufall und keine zuverlässige Methode. Dein OS rät scheinbar auf Basis der Dateiendung, was es mit der Datei anfangen soll. Wenn überhaupt, dann müsstest du die MP3-Datei zumindest mit einem konkreten Abspielprogramm aufrufen.
Aber die Schleife wiederhohlt sich eben erst wenn ich das wiedergabefenster schließe.
Ja, natürlich. Du startest mit os.system einen externen Prozess und das Skript wartet, bis der Prozess beendet ist. Schau doch mal in die Doku zu os.system rein, um zu verstehen, was das eigentlich tut; da steht dann auch, dass es bessere Alternativen gibt :) https://docs.python.org/3/library/os.html#os.system

Ich weiß auch nicht genau, was du mit Wiederholen meinst. Möchtest du mehrere MP3s gleichzeitig abspielen?

Re: os.system

Verfasst: Donnerstag 10. Januar 2019, 22:03
von sparrow
toper3902 hat geschrieben: Donnerstag 10. Januar 2019, 21:48Das Programm Funktioniert!
Nein, tut es offensichtlich nicht. Sonst hättest du ja kein Problem.
Verschiedene Multimedia-Module für Python können MP3s abspielen. Wie gesagt, unter anderem pygame.

Re: os.system

Verfasst: Freitag 11. Januar 2019, 01:45
von __deets__
Doch, es funktioniert. Unter Windows ist das offensichtlich erlaubt. “Zufällig” ist das auch nicht. Sondern hängt davon ab, wer sich hast die MP3-Endung geschnappt hat. Aber das gilt auch für einen Doppelklick 🤷🏼‍♂️

Das subprocess-Modul ist die Lösung, denn es erlaubt einen Prozess wirklich parallel zu starten. Die resultierenden Popen-Objekte sollte man dann aber aufsammeln und auf ihre Beendigung warten, mit poll & ggf. wait.

Re: os.system

Verfasst: Freitag 11. Januar 2019, 06:17
von sparrow
Das löst aber nicht das Problem des Threaderstellers, der möchte, dass sein Script merkt, wenn das Lied vorbei ist und dann navh dem Pfad zum nächsten fragen.
Mit subprocess wartet sein Sctipt zwar nicht, wei§ aber trotzdem nicht, wann eine Datei fertig wiedergegeben ist.
Oder mache ich einen Gedankenfehler?

Re: os.system

Verfasst: Freitag 11. Januar 2019, 07:06
von nezzcarth
__deets__ hat geschrieben: Freitag 11. Januar 2019, 01:45 Doch, es funktioniert. Unter Windows ist das offensichtlich erlaubt. “Zufällig” ist das auch nicht. Sondern hängt davon ab, wer sich hast die MP3-Endung geschnappt hat.
Dann halt Pseudo-zufällig ;) Ich kenne den beschriebenen Mechanismus und hatte die Formulierung trotzdem bewusst gewählt, weil es wie du schon sagtest, davon abhängt, welches Programm sich die Endung gerade gekrallt hat und ob sie nicht unbeabsichtigt gerade z.B. mit einem Audioschnittprogramm assoziiert wurde. Das Konzept ist an sich schon gut, ich weiß nur nicht, ob ich mich in einem Programm darauf verlassen würde. Das scheint mit doch eine Einstellung zu sein, die gerne Mal unbeabsichtigt oder ungefragt verstellt wird.

Re: os.system

Verfasst: Freitag 11. Januar 2019, 10:33
von __deets__
Das die Lösung wenig elegant ist - geschenkt. Ich würde so auch nicht arbeiten. Aber dem TE zu erzählen, es funktioniert nicht, obwohl es das für ihn tut, fand ich dann schon etwas hart.

@sparrow: die Anforderung, das Ende zu erkennen, kann ich nirgendwo rauslesen. Den Wunsch, das spielende Lied zu beenden, weil man ein neues gewählt hat, schon eher. Aber selbst das steht da nicht, zur Not spielen halt zwei MP3s gleichzeitig.

Re: os.system

Verfasst: Freitag 11. Januar 2019, 13:47
von __blackjack__
Das Problem liesse sich mit `Popen`-Objekten ja leicht lösen → `terminate()`.