2013-01-03 29 views
1

我想在Django中獲取start_date和end_date(處理完成後)。我有一個簡單的表單。當用戶點擊Submit我想獲取start_date並將該值插入到數據庫中。處理完成後,我想獲取end_date並將該值插入數據庫。我已經在Django中設置了數據庫。處理過程如下:當用戶點擊Django中的按鈕時,獲取start_date?

command = subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source], 
          stdout=subprocess.PIPE) 

如何知道命令執行何時結束並記錄end_date?

回答

0

您正在尋找Popen.poll()。當Popen仍在執行時它將返回None。例如:

import subprocess 
from datetime import datetime 

d1 = datetime.now() 
c = subprocess.Popen (["find", "/home/whatever", "-name","eclipse.ini"]) 

while c.poll() is None: 
    pass 

deltatime = datetime.now() - d1 
print deltatime.total_seconds() 

請注意while循環。您的程序將被卡住,直到Popen過程結束。也許你想啓動一個線程來避免這種情況。

0

如果你想這樣做的優雅方式,你應該嘗試使用異步任務系統,如celery,並執行你的bash進程內的任務,如CésarGarcía介紹。

另一種選擇是這樣執行的東西:

subprocess.Popen(['sshpass ... && curl -X GET IP:PORT/some/internal/view/%d/' % task_id], shell=True) 

完成時間可以插入到Django的視圖中的數據庫。