我试图在Django中获取start_date和end_date(处理完成后)。我有一个简单的表格。当用户单击Submit
时,我想获取start_date并将该值插入数据库。处理完成后,我想获取end_date并将该值插入数据库。我已经在Django中设置了数据库。处理完成如下:
command = subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source],
stdout=subprocess.PIPE)
如何知道命令执行何时完成并记录end_date?
答案 0 :(得分: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过程结束之前,您的程序将被卡在其中。也许你想发布一个线程来避免这种情况。
答案 1 :(得分:0)
如果你想以优雅的方式做到这一点,你应该尝试使用像celery这样的异步任务系统,并在CésarGarcía提出的任务中执行你的bash过程。
另一个选择是执行类似这样的事情:
subprocess.Popen(['sshpass ... && curl -X GET IP:PORT/some/internal/view/%d/' % task_id], shell=True)
完成时间可以插入django视图中的数据库。