子进程错误消息:_execute_child中的[Errno 2]引发child_exception

时间:2016-07-28 16:15:37

标签: python subprocess

在我的程序中,我调用命令:

command_two = 'sfit4Layer0.py -bv5 -fs'
subprocess.call(command_two.split(), shell=False)

我正在使用PyCharm并收到错误消息:

Traceback (most recent call last):
  File "part2test.py", line 5, in <module>
    subprocess.call(command_two.split(), shell=False)  #writes the summary file
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

当我浏览我的程序时,它永远不会进入我想要它的程序sfit4Layer0.py,它会陷入子进程但我不知道为什么。更改shell = True并没有做任何有用的事情 - 我没有收到这些错误消息,但它没有正确执行我的代码。任何的意见都将会有帮助。

我的bash个人资料:

PATH="~/bin:/usr/bin:${PATH}"

export PATH PYTHONPATH="/Users/nataliekille/Documents/sfit4/pbin/Layer0:/Users/nataliekille/Documents/sfit4/pbin/Layer1:/Users/nataliekille/Documents/sfit4/pbin/ModLib:/Users/nataliekille/Documents/sfit4/SpectralDB"

export PYTHONPATH

PATH=${PATH}:${PYTHONPATH}

export PATH

1 个答案:

答案 0 :(得分:1)

你错过了an important part of the subprocess documentation。 &#34;如果传递单个字符串 [在命令而不是字符串列表] ,则shell必须为True(参见下文),否则字符串必须只是命名要执行的程序没有指定任何参数。&#34;

因此内核正在进行编译,因为没有名称为'sfit4Layer0.py -bv5 -fs'的可执行文件。如果用(例如)'sfit4Layer0.py -bv5 -fs'.split()['sfit4Layer0.py', '-bv5', '-fs']替换字符串,则应该有效。