subprocess funktioniert nicht korrekt

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
keiner12345
User
Beiträge: 1
Registriert: Mittwoch 31. Juli 2013, 00:08

Ich möchte, dass ein Shell Befehl in Linux ausgeführt wird.
Der Befehl [dritter subprocess] funktioniert, wenn ich nur die >"< und >,< aus der entsprechenden Zeile entferne und direkt in die Shell kopiere, der Befehl ist also korrekt. Trotzdem bekomme ich eine Fehlermeldung, wenn ich es von Python aus starte.

Die ersten beiden Zeilen funktionieren problemlos. Im gegensatz zum dritten Befehl haben sie keine Ausgaben, das ist für mich der einzige sichtbare Unterschied.

Code: Alles auswählen

import subprocess

subprocess.call(["rm", "-rf", "einzelbilder/"])
subprocess.call(["mkdir", "einzelbilder"])
subprocess.call(["avconv", "-threads:1 2", "-i 20130731_002132.mp4", "einzelbilder/foo-%03d.jpeg"])
Ausgabe Python:
avconv version 0.8.6-6:0.8.6-1, Copyright (c) 2000-2013 the Libav developers
built on Mar 24 2013 07:20:17 with gcc 4.7.2
At least one input file must be specified
Ausgabe aus der Shell:
@localhost:~/Dropbox/Python/scanner$ avconv -threads:1 2 -i 20130731_002132.mp4 einzelbilder/foo-%03d.jpeg
avconv version 0.8.6-6:0.8.6-1, Copyright (c) 2000-2013 the Libav developers
built on Mar 24 2013 07:20:17 with gcc 4.7.2
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20130731_002132.mp4':
Metadata:
major_brand : isom
minor_version : 0
compatible_brands: isom3gp4
[...]
Danke schonmal
BlackJack

@keiner12345: Deine dritte Zeile entspricht in der Shell:

Code: Alles auswählen

avconv '-threads:1 2' '-i 20130731_002132.mp4' einzelbilder/foo-%03d.jpeg
Du musst auch '-threads:1 2' und '-i 20130731_002132.mp4' an den Leerzeichen aufteilen, genau wie eine Shell das machen würde.

Code: Alles auswählen

subprocess.call(['avconv', '-threads:1', '2', '-i', '20130731_002132.mp4', 'einzelbilder/foo-%03d.jpeg'])
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@keiner12345: statt den ersten beiden Aufrufe gibt es "shutil.rmtree" und "os.mkdir".
Antworten