我正在尝试将django项目从开发服务器转移到生产服务器。我已经解决了几乎所有的事情,只有一个(大的)例外。当我在终端中运行以下代码(使用python manage.py shell)时,它可以正常工作,但是在我的apache (使用mod_wsgi)中运行时,它不会运行得很好。
我的代码:
...
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时,我得到(作为一个例子):
2011-12-17 12:30:54.771292:所以没有错误。但是,当我在apache服务器上运行时,我得到:
2011-12-17 12:28:59.755323: /bin/sh: blastn: command not found我试图广泛地寻找解决这个问题的方法,但是找不到任何能解决问题的方法--尽管我希望我错过了一些显而易见的东西,所以我可以迅速解决这个问题。
更多信息:
F 214目录
如果您想看到任何其他代码,请告诉我。
已解决:
通过改变
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)为了绝对指向函数。非常感谢。
发布于 2011-12-18 00:53:28
在Apache/mod_wsgi下运行时,您必须使用完整的路径名来运行程序,或者使用正在访问的任何文件。这是因为您的用户路径没有被Apache继承或使用。流程的当前工作目录也可以是任何内容,因此也不能依赖于相对路径。
因此,而不是仅仅使用'blastn',使用‘/some/blastn’,用程序所在的完整路径替换‘/ So / path /’。
https://stackoverflow.com/questions/8544953
复制相似问题