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

时间:2014-05-01 17:08:11

标签: python g++ sublimetext2 python-2.6 sublime-text-plugin

我已经陷入了几个小时的特殊错误,在Google中寻找解决方案并且失败了,可能是因为问题非常具体,但它实际上有更广泛的含义,这就是为什么我一直在努力解决它。

我正在使用 Python 2.6 ,可以使用subprocess.call()在vanilla Python终端中运行名为 STAMP 的程序,甚至是iPython终端就是这样:

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

这很好,但是当我通过 sublime text 2 (ST2)使用它的 sublimeREPL插件执行python或iPython时执行相同的操作(工具> sublimeREPL> Python> ...)它失败并出现以下错误:

> 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

当您调用未安装在系统上的程序时,它会出现同样的错误。似乎自相矛盾的是,对于我测试过的除“邮票”之外的任何其他安装的程序/命令,此错误都不会出现。 (所以你会认为sublimeREPL工作正常),然而运行subprocess.call(&#39; stamp&#39;)确实可以在本机python终端以及iPython中工作(所以你会认为邮票工作/安装正常)。我想到的唯一线索是我必须使用g ++安装图章

要点:

  1. subprocess.call(&#39; stamp&#39;)在本机python终端中工作
  2. subprocess.call(&#39; stamp&#39;)在ST2的sublimeREPL python终端中不起作用
  3. subprocess.call()似乎在sublimeREPL或本机python终端
  4. 中都能正常工作

    额外信息:

    • Python 2.6.3
    • 邮票的安装程序:
      

    步骤1:安装GNU Scientific Library。           从http://www.gnu.org/software/gsl/下载           添加&#39; include&#39;和&#39; lib&#39; PATH的目录。

         

    步骤2:编译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.
    
         

    第3步:测试一下!

1 个答案:

答案 0 :(得分:2)

将我的评论转换为答案表格,以便更清楚地解决问题:

未在sublimeREPL终端内设置PATH。如果您提供戳记可执行文件的完整路径,subprocess.call将正常工作。