2012-06-26 44 views
3

我正在django中建立一個與用R編寫的大程序接口的站點,並且我希望在運行該程序的站點上有一個按鈕R程序。我有這個工作,使用subprocess.call(),但是,正如所料,服務器不會繼續呈現視圖,直到subprocess.call()返回。由於這個程序可能需要幾個小時才能運行,這不是一個真正的選擇。
有什麼辦法可以運行R程序並繼續執行python代碼? 我搜索了四周,並看着subprocess.Popen(),但我無法讓它工作。
這裏的通用代碼我使用的視圖:如何在Python中啓動一個子進程,而不是等待它返回

if 'button' in request.POST: 
    subprocess.call('R CMD BATCH /path/to/script.R', shell=True) 
    return HttpResponseRedirect('') 

希望我剛纔忽略了一些簡單。
謝謝。

回答

6
subprocess.Popen(['R', 'CMD', 'BATCH', '/path/to/script.R']) 

該過程將異步啓動。

例子:

$ cat 1.py 
import time 
import subprocess 

print time.time() 
subprocess.Popen(['sleep', '1000']) 
print time.time() 

$ python 1.py 
1340698384.08 
1340698384.08 

必須注意的是,子進程將運行主進程停止後也。

+0

感謝您的快速回答!像魅力一樣工作! –

+0

我很高興幫助你:) –

0

您可以使用subprocess.call()的包裝器,該包裝器將擁有自己的線程,在該線程中將調用subprocess.call()方法。

相關問題