外部コマンドを(Pythonスクリプト内からUnixシェルで入力したように)呼び出すにはどうすればよいですか?Pythonの外部コマンドを呼び出す
私はこのコードを試してみました:
from subprocess import call
call(["ls", "-l"])
をし、それが動作します。 しかし、私はPythonスクリプトにこのコードをしようとすると:
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'])
それは作品ありません。私はこのエラーを取得する:
sudo python getRMSAmplitude.py sox FAIL stat: Summary effect: unknown option
私はUnixシェルで次のコマンドを入力します。
sox ../../data/opsoroassistant/rec.wav -n stat 2>&1 | sed -n 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$#\1#p'
私が手:
正しいかどう0.001754
。出力のリダイレクトやパイプを解釈するシェルが存在しないため、現時点では何が起こっている
が は今、私はエラーを持っていませんが、私は、スクリプトを実行すると、それは何の価値を与えていない、ありがとうバック。 os.system( "...")と同じです。それを印刷しなければならないのですか? – Mat
なぜdownvoteが、わかりません。いいえ、 'call'はプログラムを実行しますが、出力は返されません。 'subprocess.check_output'は、プロセスが' stdout'や 'stderr'に書き込んだものを変数に取り込むことを望みます。 –
さて、私はこれを試しました: 'output = subprocess.check_output(['ls'、 '-1']) '%dバイトの出力が'%len(出力) の出力 'にあり、99バイト出力と出力では、ファイルとディレクトリのリスト。 これを試してみました: 'output = subprocess.check_output([" sox /home/pi/OnoSW/data/opsoroassistant/rec.wav -n stat 2>&1 | sed -n 's#^ RMS振幅:出力 '%len(出力) 印刷出力'に%dバイトを出力します。 '%len(出力) 印刷出力 '%len(出力) 出力'%1!私は出力としてこれを持っています: '出力で2バイトありますが、出力自体はありません。 – Mat