在 Python 中调用外部命令
Call an external command in Python
如何从 Python 脚本中调用外部命令(就像我在 Unix shell 中输入的一样)?
我试过这段代码:
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.]*\)$##p'])
没用。我收到此错误:
sudo python getRMSAmplitude.py sox FAIL stat: Summary effect: unknown option
当我在我的 Unix Shell 中键入此命令时:
sox ../../data/opsoroassistant/rec.wav -n stat 2>&1 | sed -n 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$##p'
我得到:
0.001754
正确的是
call([...], shell=True)
目前发生的情况是,您提供的其余参数 '2>&1', '|', 'sed', '-n', 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$##p']
被 sox
解释为参数,因为没有 shell解释输出重定向或管道。告诉 call
使用 shell,它的解释方式与您的命令行相同。
你也可以使用os.system
:
import os
os.system("sox ../../data/opsoroassistant/rec.wav -n stat 2>&1 | sed -n 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$##p'")
调用函数中的参数应与命令在同一字符串中。
call('sed -arg1 -arg2 -argn')
另一个选项(更易于使用)是 os.system('your original command')
import os
os.system("sox ../../data/opsoroassistant/rec.wav -n stat 2>&1 | sed -n 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$##p'")
如何从 Python 脚本中调用外部命令(就像我在 Unix shell 中输入的一样)?
我试过这段代码:
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.]*\)$##p'])
没用。我收到此错误:
sudo python getRMSAmplitude.py sox FAIL stat: Summary effect: unknown option
当我在我的 Unix Shell 中键入此命令时:
sox ../../data/opsoroassistant/rec.wav -n stat 2>&1 | sed -n 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$##p'
我得到:
0.001754
正确的是
call([...], shell=True)
目前发生的情况是,您提供的其余参数 '2>&1', '|', 'sed', '-n', 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$##p']
被 sox
解释为参数,因为没有 shell解释输出重定向或管道。告诉 call
使用 shell,它的解释方式与您的命令行相同。
你也可以使用os.system
:
import os
os.system("sox ../../data/opsoroassistant/rec.wav -n stat 2>&1 | sed -n 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$##p'")
调用函数中的参数应与命令在同一字符串中。
call('sed -arg1 -arg2 -argn')
另一个选项(更易于使用)是 os.system('your original command')
import os
os.system("sox ../../data/opsoroassistant/rec.wav -n stat 2>&1 | sed -n 's#^RMS amplitude:[^0-9]*\([0-9.]*\)$##p'")