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!
Video in loop abspielen
`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.
`subprocess.call()` blockiert in der Tat solange bis das externe Programm zuende ist.
-
- User
- Beiträge: 42
- Registriert: Freitag 27. Juni 2008, 12:21
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?
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?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Code: Alles auswählen
subprocess.Popen(["C:\Program Files\MPlayer for Windows\MPUI.exe", "-loop", "C:\Videos\videofile.mpg"])
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 42
- Registriert: Freitag 27. Juni 2008, 12:21
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!?
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!?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das soll funktionieren?dirty sanchez hat geschrieben: subprocess.Popen("C:\Program Files\MPlayer for Windows\MPUI.exe" -loop C:\Videos\videofile.mpg)
Und es gibt code-tags hier im Board btw
Wieso guckst Du nicht in die Doku:
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.doku hat geschrieben: args should be a string, or a sequence of program arguments.
-
- User
- Beiträge: 42
- Registriert: Freitag 27. Juni 2008, 12:21
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
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
Erstens kann deine zweite Version überhaupt nicht funktionieren...
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.
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.
-
- User
- Beiträge: 42
- Registriert: Freitag 27. Juni 2008, 12:21
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)
@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)
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.Zap hat geschrieben:Erstens kann deine zweite Version überhaupt nicht funktionieren...
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"])
Code: Alles auswählen
subprocess.Popen('"C:\Program Files\MPlayer for Windows\MPUI.exe" -loop "C:\Videos\videofile.mpg"')