从Django app中运行python脚本

时间:2017-12-06 22:04:01

标签: python django shell

我正在帮助构建一个与voip电话系统接口的Django应用程序,并且他们创建了一些脚本,以便在执行操作(添加,更新,删除)时执行,以便与手机保持一致系统方面。他们让我把参数传递给这样的脚本 /var/www/html/om/om_add.sh deviceid filename title 他们还提到使用urllib.quote_plus(title)将标题作为网址传递 最后,它应该在应用程序中执行每个操作后发生。 现在,我听说不建议从Django应用程序执行shell脚本,但想知道这是不是一个不同的情况?另外,我怎么能这样做,我知道如何传递这些参数的唯一方法是将它们传递给视图。非常感谢任何帮助!

def post_create(request):
    device = request.session['device']

    if device == 'dummy':
        return render(request,'access_denied.html')

    did = {'device_id': device }
    form= PostForm(request.POST or None, request.FILES or None,initial=did)


    if form.is_valid():
        instance = form.save(commit=False)
        check = Sounds.objects.all().filter(device_id= device).filter(target=instance.target).exclude(target='generic').first()



        if check:
            instance.pk = check.pk
            instance.device_id= device
            instance.save()         
            return HttpResponseRedirect('/')
        else:
            instance.device_id = device
            instance.save()

            dev = instance.device_id
            name = instance.sound.name
            title = urllib.quote_plus(instance.title) 


            os.execv('/var/www/html/ogm/ogm_add.sh', [dev,name,title])

            return HttpResponseRedirect('/')

    context= {
        'form': form,
    }
    return render(request, 'post_form.html',context,)

1 个答案:

答案 0 :(得分:2)

执行shell脚本什么都没有 与django框架有关,它是未来的核心蟒蛇。

import os
os.execv('path' , ['arg'])

arg可以是列表或元组,您可以从数据库或网址等传递它。

为了这个目的,下面的简单就是匹配击球手

from subprocess import call 
sub = call(['ls' , '-l'])
print(sub)

子包含输出