subprocess.Popen vs os.system中的错误

时间:2014-01-03 17:04:33

标签: python octave

我正在尝试使用subprocess.Popen而不是os.system,但是我遇到了问题。这看起来很简单,我可能遗漏了一些明显的东西。我试图调用并运行我之前在Octave编程的脚本(Octave代码工作正常,我不想花时间在NumPy中重写这个等)。我也不想永久地在这台特定的机器上安装Octave。

此代码完美无缺:

os.system('sudo apt-get install octave')
os.system('octave Documents/small_eig.m')
os.system('sudo apt-get remove octave')

但是这段代码:

subprocess.Popen('sudo apt-get install octave')
subprocess.Popen('octave Documents/small_eig.m')
subprocess.Popen('sudo apt-get remove octave')

生成以下消息:

Traceback (most recent call last):
  File "Documents/ben.py", line 11, in <module>
    subprocess.Popen('sudo apt-get install octave')
  File "/usr/lib/python2.7/subprocess.py", line 709, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1326, in _execute_child
     raise child_exception
OSError: [Errno 2] No such file or directory

有什么想法吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

您需要以“shell-mode”运行命令。为此,请在致电shell=True时传递Popen。试试:

subprocess.Popen('sudo apt-get install octave', shell=True)