os.system

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
toper3902

Donnerstag 10. Januar 2019, 21:42

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?
Benutzeravatar
sparrow
User
Beiträge: 1165
Registriert: Freitag 17. April 2009, 10:28

Donnerstag 10. Januar 2019, 21:45

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.
toper3902

Donnerstag 10. Januar 2019, 21:48

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
nezzcarth
User
Beiträge: 689
Registriert: Samstag 16. April 2011, 12:47

Donnerstag 10. Januar 2019, 22:01

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?
Zuletzt geändert von nezzcarth am Donnerstag 10. Januar 2019, 22:05, insgesamt 2-mal geändert.
Benutzeravatar
sparrow
User
Beiträge: 1165
Registriert: Freitag 17. April 2009, 10:28

Donnerstag 10. Januar 2019, 22:03

toper3902 hat geschrieben:
Donnerstag 10. Januar 2019, 21:48
Das 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.
__deets__
User
Beiträge: 5589
Registriert: Mittwoch 14. Oktober 2015, 14:29

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. 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.
Benutzeravatar
sparrow
User
Beiträge: 1165
Registriert: Freitag 17. April 2009, 10:28

Freitag 11. Januar 2019, 06:17

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?
nezzcarth
User
Beiträge: 689
Registriert: Samstag 16. April 2011, 12:47

Freitag 11. Januar 2019, 07:06

__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.
__deets__
User
Beiträge: 5589
Registriert: Mittwoch 14. Oktober 2015, 14:29

Freitag 11. Januar 2019, 10:33

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.
Benutzeravatar
__blackjack__
User
Beiträge: 3350
Registriert: Samstag 2. Juni 2018, 10:21

Freitag 11. Januar 2019, 13:47

Das Problem liesse sich mit `Popen`-Objekten ja leicht lösen → `terminate()`.
“I am Dyslexic of Borg, Your Ass will be Laminated” -- unknown
Antworten