Verarbeiten von subprocess.call () in Django

Die einfache Idee der App, die ich entwickle, ist der Benutzer geben die Linux-Befehle und das Ergebnis des Linux-Befehls wird im Webbrowser angezeigt. Hier ist meine views.py:

from django.shortcuts import render_to_response from django.http import HttpResponseRedirect from django.template import RequestContext import subprocess globalcmd = 0 globalresult = 0 def ls(request): if request.method == 'POST': globalcmd = request.POST.get('command', False) globalresult = subprocess.call(['globalcmd'], shell=True) return HttpResponseRedirect('/thanks/') else: pass return render_to_response('form.html', {'cmd':'cmd'}, context_instance=RequestContext(request)) def show_template(request): return render_to_response('thanks.html', {'globalok':globalresult}, context_instance=RequestContext(request)) 

Ich bekomme Eingabe von form.html, die von View 'ls' verarbeitet wird. Als Benutzer tippe ich nur mit dem Befehl. Immer wenn ich ls Befehl drücke, wird es von suprocess.call verarbeitet und in globalresult gespeichert, die später in thanks.html aufgerufen wird. Meine Ausgabe ist 0. Was mache ich falsch? Hier ist danke.html:

 <h1> {{ globalresult }} </h1> 

    2 Solutions collect form web for “Verarbeiten von subprocess.call () in Django”

    Überprüfen Sie die Dokumentation der Funktion, die Sie anrufen , das Ergebnis ist der Rückkehrcode des Aufrufs , nicht die Ausgabe des Befehls selbst. Also, ich denke, dass Ihr Code genau das macht was es sollte.

    Vielleicht solltest du subprocess.check_output anrufen?

    Als eine Seite beachten, seien Sie sehr vorsichtig mit dieser Web-Terminal-Interaktion; Wenn Sie diese Web-Anwendung auf das Internet ohne ordnungsgemäße Sicherheit aussagen, werden schlechte Dinge passieren … aber Sie wissen das wahrscheinlich.

    Du gehst nicht globalresult an die thanks.html Vorlage in show_template ()

    Sie wollen wahrscheinlich

     return render_to_response('thanks.html', {'globalresult':globalresult}, context_instance=RequestContext(request)) 

    Wenn faul du auch kannst du

     return render_to_response('thanks.html', locals(), context_instance=RequestContext(request)) 

    … obwohl es scheint, wie du versuchst, eine Umleitung zu machen, um auf die Dankeschön-Seite zu kommen (?). In diesem Fall wäre es besser, das Dankeschön sofort zu sehen

    ZB diese Zeile ersetzen

     return HttpResponseRedirect('/thanks/') 

    Mit einer der beiden Zeilen über ^ in ma Antwort

    Python ist die beste Programmiersprache der Welt.