【问题标题】:Run python scripts from within Django app从 Django 应用程序中运行 python 脚本
【发布时间】:2017-12-06 22:04:00
【问题描述】:

我正在帮助构建一个与 voip 电话系统交互的 Django 应用程序,他们创建了一些脚本以在执行操作(添加、更新、删除)时执行,以便与电话保持一致系统端。他们要求我像这样将参数传递给脚本 /var/www/html/om/om_add.sh deviceid filename title 他们还提到将标题作为 url 传递,使用 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,)

【问题讨论】:

    标签: python django shell


    【解决方案1】:

    执行一个shell脚本没有任何意义 与 django 框架有关,它是 python 未来的核心。

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

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

    下面的简单方法就是为此目的匹配击球手

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

    子包含输出

    【讨论】:

    • 感谢您的回答!所以我试图实现它的方式可能是愚蠢的,但你可以看看我上面添加的代码(在创建视图中),特别是在“else”语句之后。它似乎在我的最终工作正常,但我不确定如何检查它是否实际工作和运行脚本
    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 2023-01-30
    • 2020-10-26
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多