在Sublime Text 2中,此程序的python subprocess.call()失败

0 投票
1 回答
961 浏览
提问于 2025-04-18 05:01

我遇到了一个奇怪的错误,卡了好几个小时,试着在谷歌上找解决办法,但都没成功,可能是因为这个问题太具体了。不过,这个问题其实有更广泛的影响,所以我一直在努力解决它。

我使用的是Python 2.6,可以通过subprocess.call()在普通的Python终端或者iPython终端中运行一个叫STAMP的程序,像这样:

>>>Import subprocess
>>>subprocess.call('stamp')

这样运行没问题,但当我通过sublime text 2(ST2)使用它的sublimeREPL插件来运行Python或iPython时,就出现了以下错误:

> Traceback (most recent call last):   File "<stdin>", line 1, in
> <module>   File "<string>", line 27, in <module>   File
> "/usr/lib64/python2.6/subprocess.py", line 478, in call
>     p = Popen(*popenargs, **kwargs)   File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
>     errread, errwrite)   File "/usr/lib64/python2.6/subprocess.py", line 1234, in _execute_child
>     raise child_exception OSError: [Errno 2] No such file or directory

这个错误和你调用一个没有安装在系统上的程序时出现的错误是一样的。奇怪的是,除了'stamp'之外,我测试过的其他已安装程序/命令都没有出现这个错误(所以你可能会觉得sublimeREPL工作正常),而且在普通的Python终端和iPython中运行subprocess.call('stamp')是可以的(所以你可能会觉得stamp安装得很好)。我唯一想到的线索是,我是通过g++安装的stamp。

总结:

  1. 在普通的Python终端中,subprocess.call('stamp')可以正常工作。
  2. 在ST2的sublimeREPL Python终端中,subprocess.call('stamp')无法正常工作。
  3. subprocess.call()在sublimeREPL和普通Python终端中似乎都能正常工作。

额外信息:

  • Python 2.6.3
  • 安装stamp的步骤:

第一步:安装GNU科学库。可以从http://www.gnu.org/software/gsl/下载,并将'include'和'lib'目录添加到你的PATH中。

第二步:编译STAMP代码。可以使用如下命令:

        g++ -O3 -o stamp Motif.cpp Alignment.cpp ColumnComp.cpp \
            PlatformSupport.cpp PlatformTesting.cpp Tree.cpp \
            NeuralTree.cpp MultipleAlignment.cpp RandPSSMGen.cpp \
            ProteinDomains.cpp main.cpp -lm -lgsl -lgslcblas

    Note: if the GSL library is not in the PATH, add the appropriate
    directories using the -L and -I compiler options.

第三步:测试一下!

1 个回答

2

把我的评论转成答案,这样更清楚问题是怎么解决的:

在sublimeREPL终端里,PATH没有设置好。如果你给出stamp可执行文件的完整路径,subprocess.call就能正常工作了。

撰写回答