如果子进程结束处理

时间:2017-08-10 09:58:54

标签: python django subprocess

在我的django视图中,我需要在子进程完成后发送电子邮件通知,因为子进程启动的脚本在后台运行一些命令,所以在脚本完成之前发送电子邮件,有没有人知道我怎么做这样做?

我的观点:

def getor(request):
# process
    subprocess.call("./step1.sh", shell=True)
#send notification
    current_site = get_current_site(request)
    user = User.objects.values('username').order_by('id').last()
    us = user['username']
    subject = 'Notification of endprocess.'
    message = render_to_string('notify.html', {
       'us':us,
       'domain':current_site.domain,
    })
    eml = User.objects.values('email').order_by('id').last()
    toemail = eml['email']
    email = EmailMessage(subject, message, to=[toemail])
    email.send()
    return render(request, 'endexecut.html')

1 个答案:

答案 0 :(得分:1)

快速修复可以将电子邮件发送到函数中并创建python文件。从step1.sh

调用它

我无法理解的是,subprocess.call是一个阻塞函数。即在调用函数未完成之前,它不会转到下一行代码。

我和gevent一起去。把所有的功能都放在gevent中。在函数内部首先调用子进程并存储PID。下一个代码应该是while循环并检查PID是否存在。如果不是发送邮件并打破循环。或者睡一会儿。