Wie kann ich einen externen Befehl (als ob ich es in der Unix-Shell eingegeben hatte) aus einem Python-Skript heraus aufrufen?Aufruf eines externen Befehls in Python
habe ich versucht, diesen Code:
from subprocess import call
call(["ls", "-l"])
und es funktioniert. Aber wenn ich versuche, diesen Code in einem Python-Skript:
from subprocess import call
call(['sox', '/home/pi/OnoSW/data/opsoroassistant/rec.wav', '-n', 'stat', '2>&1', '|', 'sed', '-n', 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$#\1#p'])
es nicht funktioniert. Ich bekomme diese Fehlermeldung:
sudo python getRMSAmplitude.py sox FAIL stat: Summary effect: unknown option
Wenn ich diesen Befehl in meinem Unix Shell eingeben:
sox ../../data/opsoroassistant/rec.wav -n stat 2>&1 | sed -n 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$#\1#p'
ich:
0.001754
Was richtig ist.
Danke, Jetzt habe ich keine Fehler, aber wenn ich das Skript ausführen gibt es keinen Wert zurück. Das gleiche gilt für os.system ("..."). Muss ich es ausdrucken oder so? – Mat
Nicht sicher, warum der Downvote, aber ok. Nein, 'call' führt nur das Programm aus, es gibt keine Ausgabe zurück. Sie werden wollen, dass 'subprocess.check_output' den Prozess, den der Prozess in 'stdout' oder 'stderr' geschrieben hat, in eine Variable aufnimmt. –
Nun habe ich das versucht: 'output = subprocess.check_output (['ls', '-1']) print 'Haben% d Bytes in Ausgabe'% len (Ausgabe) Druckausgabe 'und ich habe 99 Bytes in der Ausgabe und der Ausgabe eine Liste von Dateien und Verzeichnissen. und dann habe ich Folgendes versucht: 'output = subprocess.check_output ([" sox /home/pi/OnoSW/data/opsoroassistant/rec.wav -n stat 2> & 1 | sed -n 's #^RMS-Amplitude: [^0-9] * \ ([0-9.] * \) $ # \ 1 # p '"], shell = True) print' Haben% d Bytes in Ausgabe '% len (Ausgabe) Druckausgabe' und ich habe das als Ausgabe: 'Habe 2 Bytes in der Ausgabe', aber nicht die Ausgabe selbst. – Mat