2012-08-16 75 views
2

我正在運行apache,Django和wsgi。我也使用這個名爲SAS的其他軟件來做統計分析。只是爲了給你一些背景。我的最終目標是當客戶端在用django編寫的表單上提交時,相應的sas腳本被稱爲(通過python wsgi腳本),它在服務器上執行計算,然後將客戶端重定向到輸出頁面。使用wsgi腳本來調用exe

我有一個叫做test5.py的基本腳本。它看起來像這樣:

import os 
import subprocess 

def application(environ, start_response): 

    status = '200 OK' 
    output = 'Running External Program!' 

    f = open("C:\Documents and Settings\eric\Desktop\out.txt", 'a') 
    f.write('hi') 
    f.close() 

    #os.system(r'start "C:\Program Files\SAS92\SASFoundation\9.2\sas.exe"') 
    #subprocess.call([r'C:\Program Files\SAS92\SASFoundation\9.2\sas.exe']) 
    #os.startfile(r'C:\Program Files\SAS92\SASFoundation\9.2\sas.exe') 
    response_headers = [('Content-type', 'text/plain'), 
         ('Content-Length', str(len(output)))] 

    #start_response('301 Redirect', [('Location', 'http://myserver/reports'),]) 
    start_response(status, response_headers) 

    return [output] 

那麼,什麼情況是,out.txt文件確會創建並有書面文件中hi。這很酷。前3條註釋行是3次嘗試讓這個相同的腳本也呼叫服務器上的sas.exe。我只是試圖讓任何.exe現在工作,所以調用油漆或寫字板會很好。但是,這些行似乎不在wsgi上下文中執行。如果我只是加載Python命令行,我可以得到.exes執行得很好。此外,最後的評論似乎在重定向中正常工作。我不確定是否需要配置Apache來添加可執行文件。如果我錯誤地使用了條款,請原諒我。我對這一切還是比較陌生的。

感謝


聖保羅嗨,

我試圖尋找到你的最後評論。我有點困惑,至於我在尋找什麼或如何尋找它。以下是我收集的一些信息。順便說一下,我在Windows XP上運行並使用Apache 2.2。

我的apache是​​爲所有用戶安裝的,因爲在regedit中,變量ServerRoot位於HKEY_LOCAL_MACHINE(http://httpd.apache.org/docs/2.2/platform/windows.html)下。另外我相信SAS是安裝在所有用戶之下的。我通過讓我的同事使用她的登錄信息進行了測試,並且我仍然可以訪問。我不確定這是否足夠的測試。

我運行wsgi時得到的日誌如下。我不確定這個過程是否空白。

[Mon Aug 20 10:33:17 2012] [info] [client 10.60.8.71] mod_wsgi(pid = 5980,process ='',application ='com |/test5'):重新加載WSGI腳本'C:/Sites/cprm/pyscripts/test5.wsgi'。

此外,我嘗試從我發佈的評論中發佈的鏈接.bat技巧早些時候發佈到無濟於事。我製作了一個簡單的批處理文件,它只是響應'嗨'並將它放在我的wsgi腳本所在的同一個目錄中。我覺得那裏應該沒有接入問題,但我可能會誤解。我也只是嘗試使用子進程調用一個簡單的python腳本來測試。也沒有發生。

也只是給你看,我的httpd.conf文件看起來像這樣:

的AllowOverride無 選項無 訂購允許,拒絕 所有

WSGIScriptAlias/test1的「C允許:/ 「/ sites/cprm/pyscripts/test3」。py WSGIScriptAlias/test4「C:/sites/cprm/pyscripts/test4.py」 WSGIScriptAlias/test5「C:/sites/cprm/pyscripts/test5.wsgi」 WSGIScriptAlias /「C:/ sites/cprm/wsgi。 py「

此信息是否有幫助?另外,我在尋找一個特定的環境變量或什麼?

再次感謝

+0

你在做什麼樣的統計分析? proc freq/tabulate /手段等...等等。? – 2012-08-17 00:02:10

+0

我在銀行做信用風險管理。我想要一種方法來前端使用SAS和其他語言編寫的一系列模型。有些程序基於更多計算,而其他程序僅用於填充圖表/報告。 – user1604594 2012-08-17 15:22:25

回答

1

對於執行後臺計算或其他任務的Web應用程序,恕我直言,這是最好的排隊,而不是從一個Django視圖調用外部程序進行處理的任務,任務完成之前掛起的一切。這導致更好:

  • 用戶體驗(請求立即返回 - 使用Ajax信號任務狀態和現在的下載鏈接,一旦任務完成)
  • 安全(後臺程序可以在更安全的憑證經營)
  • 可擴展性(任務可以在服務器之間進行分配)
  • 彈性(默認情況下許多網絡服務器,如果您的應用程序無法在30秒左右回答將發送一個「錯誤500」)

對於後臺程序處理,隊列中的所有條目,有幾種方法取決於你想要多大規模:

[編輯]

您從WSGI腳本啓動程序將在同一用戶下運行是運行網絡服務器。在Linux中,它通常是'www-data'或'nobody',在Windows/IIS中它是'IUSR_MachineName'(或者如果使用IIS身份驗證,則爲經過身份驗證的用戶)。檢查您是否可以使用您的WSGI所運行的相同憑據來啓動該程序。

+0

這是我沒有考慮過的一個重點。我在看django芹菜。我有一些任務可能需要10個小時才能完成。我也有一些只需要幾秒鐘的查詢。在這種情況下,我的上述系統嘗試是否合理? 也只是爲了幫助我澄清一些事情,因爲我一直在研究這一點。我不能在客戶端觸發提交的位置觸發javaScript來調用服務器上的.exe文件。那是對的嗎? – user1604594 2012-08-17 15:25:12

+0

另外,WSGI在高層完成了與CGI相同的功能,因爲他們可以通過瀏覽器調用.py來製作動態網頁內容。我覺得調用一個.exe並不是真正的wsgi的主要目的。我想我仍然不清楚爲什麼我的os.system調用不執行。再次感謝。 – user1604594 2012-08-17 15:30:53

+0

因此,看起來這個人已經完成了我最初着手做的事情:http://stackoverflow.com/questions/10809944/trying-to-start-chrome-from-wsgi-python-admittedly-quick-and-髒雙贏-XP-X。仍然困惑ahhhh。 – user1604594 2012-08-17 16:09:29