python - 如果子进程结束处理则运行代码

标签 python django subprocess

在我的 django View 中,我需要在子进程完成后发送电子邮件通知,因为子进程启动的脚本正在后台运行一些命令,因此电子邮件是在脚本完成之前发送的,有谁知道我该如何做这样做吗?

我的看法:

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')

最佳答案

快速修复可以将电子邮件发送放入函数中并创建一个 python 文件。从 step1.sh 调用它

我无法理解的是,subprocess.call 是一个阻塞函数。即,直到调用函数中的命令未完成为止,它不会转到下一行代码。

我会选择 gevent。把所有的函数都是geventspawn。在函数内部首先调用子进程并存储PID。接下来的代码应该是一个 while 循环并检查 PID 是否存在。如果不是,请发送邮件并打破循环。或者休眠几秒钟。

关于python - 如果子进程结束处理则运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45610473/

相关文章:

python子进程: raising an error when a process prompts

Python 子进程 popen 管道

python - QT4、GTK+、wxWidgets 或 IronPython,用于使用 Python 的 native Windows 应用程序

python - 在一定数量的变量之后更改列表输出

django - 计算 Django 查询集中相同的字段值

python - 如何使用自定义 AdminSite 类?

python - 使用 python 的 ElementTree 合并 xml 文件

python - 将 Python 的 grpcio 模块嵌入到 Bazel 项目中

python - 使用 Visual Studio 2013 在 Windows 10 上为 Python 编译 OpenCV wit contrib 模块

python - 为python中的警报程序部分播放音频文件