簡體   English   中英

在Apache中使用子流程時出現“找不到命令”錯誤

[英]'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM