2017-12-06 9 views
1

Ich helfe beim Erstellen einer Django-App, die mit einem VoIP-Telefonsystem verbunden ist, und sie haben einige Skripts erstellt, die ausgeführt werden, wenn eine Aktion ausgeführt wird (hinzufügen, aktualisieren, löschen)) um Parität mit der Telefonsystemseite zu haben. Sie haben mich gebeten, die Parameter an das Skript wie folgt zu übergeben /var/www/html/om/om_add.sh deviceid filename title Sie haben auch erwähnt, den Titel als URL übergeben, mit urllib.quote_plus(title) Schließlich sollte es auftreten, nachdem jede Aktion in der App ausgeführt wird. Nun habe ich gehört, dass die Ausführung von Shell-Skripten aus einer Django-App nicht empfohlen wird, aber fragen Sie sich, ob das ein anderer Fall ist? Wie ich das auch tun kann, ist der einzige Weg, wie ich diese Parameter weitergeben kann, sie durch eine Sicht zu leiten. Jede Hilfe wird sehr geschätzt!Führen Sie Python-Skripte aus der Django App

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

Antwort

2

ein Shell-Skript ausgeführt hat nichts mit django Rahmen zu tun Zukunft ist es Kern Python.

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

die arg kann eine Liste oder ein Tupel sein, das Sie es aus der Datenbank oder URL usw. passieren kann

die einfache Folowing ist Spiel Teig für diesen Zweck

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

die Unter die enthalten Ausgabe

+0

Danke für die Antwort! Die Art und Weise, wie ich versuche, es zu implementieren, mag dumm sein, aber kannst du möglicherweise den Code, den ich oben hinzugefügt habe (in der Erstellungsansicht), überprüfen, insbesondere nach der "else" -Anweisung. Es scheint an meinem Ende korrekt zu funktionieren, aber ich bin mir nicht sicher, wie ich überprüfen kann, ob es tatsächlich funktioniert und das Skript ausführt –

Verwandte Themen