[英]'command not found' error when using subprocess in apache
我正在嘗試將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
我已經嘗試過廣泛地尋找解決此問題的方法,但是找不到任何可以解決的方法-盡管我希望我缺少明顯的明顯的東西,所以我可以快速進行解決。
附加信息:
OS X雪豹
python版本是2.7.2
Django 1.3
PATH包含帶有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下運行時,必須使用完整的路徑名來運行程序,或為此訪問任何文件。 這是因為您的用戶PATH未被Apache繼承或使用。 進程的當前工作目錄也可以是任何目錄,因此也不能依賴相對路徑。
因此,使用“ / some / path / blastn”代替“ blastn”,用程序所在位置的完整路徑替換“ / some / path /”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.