我正在尝试将我的django项目从开发服务器移动到生产服务器。我几乎把所有的事情都解决了,只有一个例外。当我在终端中运行以下代码(使用python manage.py shell
)时,它可以正常工作,但是通过我的apache服务器(使用mod_gwsgi)运行它就不能正常运行了。在
我的代码:
...
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
时,我得到(例如):
所以没有错误。但是,当我运行我的apache服务器时,我得到:
2011-12-17 12:28:59.755323: /bin/sh: blastn: command not found
我试着广泛地寻找这个问题的解决方案,但找不到任何能解决问题的方法——尽管我希望我遗漏了一些显而易见的东西,以便我能迅速解决这个问题。在
附加信息:
OS X雪豹
python版本是2.7.2
django 1.3
路径包含blastn的目录
如果您还想查看其他代码,请告诉我。在
已解决:
通过改变
process = subprocess.Popen(str(blastn_cline),shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE)
到
process = subprocess.Popen('/Users/basehunt/BLAST/ncbi-blast-2.2.25+/bin/'+str(blastn_cline),shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE)
为了绝对指向函数。非常感谢。在
当在Apache/mod wsgi下运行时,必须使用正在运行的程序的完整路径名,或者为此访问的任何文件。这是因为您的用户路径不是由Apache继承或使用的。进程的当前工作目录也可以是任何内容,因此也不能依赖于相对路径。在
因此,不要只使用'blastn',使用'/some/path/blastn',将'/some/path/'替换为程序所在的完整路径。在
相关问题 更多 >
编程相关推荐