Video in loop abspielen

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

Montag 14. Juli 2008, 14:26

dirty sanchez hat geschrieben:wofür gibts denn das forum?
Ganz sicher nicht, um dir die Dokumentation vorzulesen oder Google für dich zu bedienen.
wenn jeder ewig zeit hätte, würde mal wohl irgendwann die lösung seiner probleme alleine finden. also kann mir jemand weiterhelfen?
Du erwartest also, dass andere sich die Zeit nehmen, die du nicht für Recherche in Dokumentationen oder fürs Googlen verwenden willst? Habe ich das so richtig verstanden?
dirty sanchez
User
Beiträge: 42
Registriert: Freitag 27. Juni 2008, 12:21

Dienstag 15. Juli 2008, 10:58

nein das erwarte ich nicht, aber es gibt leute die das ja schon wissen!
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Dienstag 15. Juli 2008, 12:23

Und die haben, um ihr Wissen weiter zu geben, die Dokumentation geschrieben!
dirty sanchez
User
Beiträge: 42
Registriert: Freitag 27. Juni 2008, 12:21

Dienstag 15. Juli 2008, 12:30

alles klar
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Dienstag 15. Juli 2008, 12:33

dirty sanchez
User
Beiträge: 42
Registriert: Freitag 27. Juni 2008, 12:21

Mittwoch 16. Juli 2008, 08:24

danke, noch ne frage:

subprocess.Popen(arg, shell=True)

was genau macht das shell=True? die cracks raten einem ja ohne shell, sondern mit argument in Liste zu schreiben:

subprocess.Popen([arg])

wie genau muss arg dann aussehen wenn der pfad meines players, -loop und der pfad der abzuspielenden dateien drinstehen soll?
dazu kommt noch, wenn ichs mit subprocess.call mache kann ich meine gui nicht bedienen solange der player läuft!?

schonmal im voraus danke!
BlackJack

Mittwoch 16. Juli 2008, 09:29

`arg` muss dann eine Liste mit den einzelnen Argumenten sein. Du musst also das machen, was sonst die Shell macht, mit dem Vorteil, dass Du einfach exakt das schreibst, was auch wirklich beim Programm ankommen soll und nicht darauf achten musst, das bestimmte spezielle Zeichen, die von Shell zu Shell unterschiedlich sein können, besonders geschützt werden müssen. Siehe snafu's `subprocess.call()`-Beispiel ganz am Anfang.

`subprocess.call()` blockiert in der Tat solange bis das externe Programm zuende ist.
dirty sanchez
User
Beiträge: 42
Registriert: Freitag 27. Juni 2008, 12:21

Mittwoch 16. Juli 2008, 09:57

ok also er ersetze ich subprocess.Popen(arg, shell=True),

subprocess.Popen([arg]) gibt bei mir jedoch ein fehler, also hab ich rumprobiert und

subprocess.Popen(arg) funktioniert wieder da arg bei mir so aussieht:
"C:\Program Files\MPlayer for Windows\MPUI.exe" -loop C:\Videos\videofile.mpg

kann man das so lassen?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 16. Juli 2008, 10:10

Code: Alles auswählen

subprocess.Popen(["C:\Program Files\MPlayer for Windows\MPUI.exe", "-loop", "C:\Videos\videofile.mpg"])
Also so schwer war das jetzt nicht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
dirty sanchez
User
Beiträge: 42
Registriert: Freitag 27. Juni 2008, 12:21

Mittwoch 16. Juli 2008, 10:18

nein das habe ich nicht gemeint, sondern was der unterschied zwischen

subprocess.Popen(["C:\Program Files\MPlayer for Windows\MPUI.exe", "-loop", "C:\Videos\videofile.mpg"])

und

subprocess.Popen("C:\Program Files\MPlayer for Windows\MPUI.exe" -loop C:\Videos\videofile.mpg)

ist!?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 16. Juli 2008, 10:30

dirty sanchez hat geschrieben: subprocess.Popen("C:\Program Files\MPlayer for Windows\MPUI.exe" -loop C:\Videos\videofile.mpg)
Das soll funktionieren? :shock:

Und es gibt code-tags hier im Board btw ;-)

Wieso guckst Du nicht in die Doku:
doku hat geschrieben: args should be a string, or a sequence of program arguments.
Also entweder packst Du den Aufruf in einen String oder eben Du splittest alles und nutzt eine Liste. Leonidas hat Dir doch eine gute Lösung präsentiert.
dirty sanchez
User
Beiträge: 42
Registriert: Freitag 27. Juni 2008, 12:21

Mittwoch 16. Juli 2008, 10:34

arg = "C:\Program Files\MPlayer for Windows\MPUI.exe" -loop C:\Videos\videofile.mpg -> arg ist ja mein string und das funktioniert auch
subprocess.Popen(arg)

ich wollte eigentlich nur wissen ob es einen unterschied macht ob als string oder eine liste der argumente!? ist eine variante besser als die andere :wink:
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mittwoch 16. Juli 2008, 10:42

Erstens kann deine zweite Version überhaupt nicht funktionieren... :shock:

Zweitens: Der Unterschied bei der Verwendung eines einfachen Strings und einer Liste von Argumenten als Parameter liegt darin, dass du dich nicht um das so genannte Quoten kümmen musst. D.h, dass Parameter die Leerzeichen beinhalten entsprechend in Anführungszeichen gesetzt werden usw.
dirty sanchez
User
Beiträge: 42
Registriert: Freitag 27. Juni 2008, 12:21

Mittwoch 16. Juli 2008, 10:56

also vielen dank an alle :)

@Zap
ja gut es fehlen die hochkomma, aber so funktionierts sicher! habs ja im einsatz:
arg = '"C:\Program Files\MPlayer for Windows\MPUI.exe" -loop C:\Videos\videofile.mpg'
subprocess.Popen(arg)
lunar

Mittwoch 16. Juli 2008, 13:32

Zap hat geschrieben:Erstens kann deine zweite Version überhaupt nicht funktionieren... :shock:
subprocess.Popen gibt das erste Argument eigentlich unverändert an os.exec* bzw. CreateProcess weiter. Ersteres nimmt unter Unix auch einen einzigen String entgegen, interpretiert ihn aber als aufzurufendes Kommando, weswegen die Übergabe eines einzelnen Strings unter Unix nicht funktioniert, wenn man Argumente übergeben möchte.

Unter Windows funktioniert die Stringvariante allerdings immer. Hintergrund ist, dass Windows nicht in jeder Version das POSIX-Subsystem enthält, und exec() unter Windows ergo nicht zuverlässig funktioniert.

Deswegen nutzt "subprocess" "CreateProcess" aus der win32 API, die einen String entgegen nimmt. Deswegen konvertiert subprocess eine übergebene Liste mit einer bestimmten Funktion in einen solchen String.

Der Aufruf:

Code: Alles auswählen

subprocess.Popen(["C:\Program Files\MPlayer for Windows\MPUI.exe", "-loop", "C:\Videos\videofile.mpg"])
ist unter Windows faktisch äquivalent zu:

Code: Alles auswählen

subprocess.Popen('"C:\Program Files\MPlayer for Windows\MPUI.exe" -loop "C:\Videos\videofile.mpg"')
Trotzdem sollte man die Liste verwenden, um sich nicht selbst ums Quoting kümmern zu müssen.
Antworten