首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在apache中使用子进程时出现的“命令未找到”错误

在apache中使用子进程时出现的“命令未找到”错误
EN

Stack Overflow用户
提问于 2011-12-17 13:06:23
回答 1查看 5.4K关注 0票数 2

我正在尝试将django项目从开发服务器转移到生产服务器。我已经解决了几乎所有的事情,只有一个(大的)例外。当我在终端中运行以下代码(使用python manage.py shell)时,它可以正常工作,但是在我的apache (使用mod_wsgi)中运行时,它不会运行得很好。

我的代码:

代码语言:javascript
复制
    ...
    blastn_cline = NcbiblastnCommandline(query=filepath, db=db, evalue=0.1, outfmt=5, out=out, task="blastn-short", dust="no")
    process = subprocess.Popen(str(blastn_cline),shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE)
    proc_out, proc_err = process.communicate()
    err_log = open('/Users/basehunt/logs/ncbi_error_log.log', 'a+')
    err_log.write("\n"+str(datetime.datetime.now())+": "+str(proc_err))
    err_log.close()
    ...

当我在运行完终端后查看我的日志文件ncbi_error_log.log时,我得到(作为一个例子):

代码语言:javascript
复制
2011-12-17 12:30:54.771292:

所以没有错误。但是,当我在apache服务器上运行时,我得到:

代码语言:javascript
复制
2011-12-17 12:28:59.755323: /bin/sh: blastn: command not found

我试图广泛地寻找解决这个问题的方法,但是找不到任何能解决问题的方法--尽管我希望我错过了一些显而易见的东西,所以我可以迅速解决这个问题。

更多信息:

  • OS X雪豹
  • python版本为2.7.2
  • django 1.3
  • 路径包含blastn

F 214目录

如果您想看到任何其他代码,请告诉我。

已解决:

通过改变

代码语言:javascript
复制
process = subprocess.Popen(str(blastn_cline),shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE)

代码语言:javascript
复制
process = subprocess.Popen('/Users/basehunt/BLAST/ncbi-blast-2.2.25+/bin/'+str(blastn_cline),shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE)

为了绝对指向函数。非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-18 00:53:28

在Apache/mod_wsgi下运行时,您必须使用完整的路径名来运行程序,或者使用正在访问的任何文件。这是因为您的用户路径没有被Apache继承或使用。流程的当前工作目录也可以是任何内容,因此也不能依赖于相对路径。

因此,而不是仅仅使用'blastn',使用‘/some/blastn’,用程序所在的完整路径替换‘/ So / path /’。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8544953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档