在我的程序中,我调用命令:
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
答案 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']
替换字符串,则应该有效。