我正在帮助构建一个与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,)
答案 0 :(得分:2)
执行shell脚本什么都没有 与django框架有关,它是未来的核心蟒蛇。
import os
os.execv('path' , ['arg'])
arg可以是列表或元组,您可以从数据库或网址等传递它。
为了这个目的,下面的简单就是匹配击球手from subprocess import call
sub = call(['ls' , '-l'])
print(sub)
子包含输出