我想將我的django項目從開發服務器移到生產服務器。我用一個(BIG)例外解決了幾乎所有的問題。當我在終端中運行以下代碼(使用python manage.py shell
)時,它工作正常,但是通過我的apache服務器(使用mod_wsgi)運行時運行不正常。'找不到命令'在apache中使用子進程時出錯'
我的代碼:
...
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)
,以絕對的指向功能。非常感謝。
嗨格雷厄姆,非常感謝。正如我在編輯中提到的那樣,我需要用''''而不是'/'來指定我的路徑。不知道這是爲什麼。另外,你對這個問題刪除的有關'/ bin/sh'搞亂的評論是如此的正確......這樣做真的和我的服務器搞砸了,我不得不做很多救援。另外,在modwsgi上做的很棒!再次感謝。 – rjralgar 2011-12-19 01:03:07
你不應該需要雙斜槓,所以不知道那裏發生了什麼,除非你第一次更改代碼時沒有重新加載代碼。甚至無法想象爲什麼你會想到首先嚐試雙斜槓。關於源代碼重新加載的問題,可能是http://code.google。com/p/modwsgi/wiki/ReloadingSourceCode – 2011-12-19 01:37:56
完全正確 - 我沒有正確地重新加載我的源代碼,完全愚蠢。沒想到我從一開始就沒有寫過斜線,但git告訴我我做過了(爲什麼我會這樣做,我不知道 - 認爲我的大腦已經從這個'/ bin/sh'問題中被炒掉了) 。無論如何,再次感謝。 – rjralgar 2011-12-19 01:45:52