繁体   English   中英

在Django中处理subprocess.call()

[英]Processing subprocess.call() in Django

我正在开发的应用程序的简单想法是用户提供Linux命令,Linux命令的结果将显示在webbrowser中。 这是我的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))

我从form.html获得输入,由view'ls'处理。 作为用户,我只是使用ls命令进行测试。 每当我按ls命令时,它都由suprocess.call处理并存储在globalresult中,稍后在thanks.html中调用。 我的输出是0.我做错了什么? 这是thanks.html:

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

检查您正在调用函数的文档,结果是调用的返回代码,而不是命令本身的输出。 所以,我认为你的代码完全符合它的要求。

也许你打算调用subprocess.check_output

作为旁注,要非常小心这种网络终端互动; 如果你在没有适当安全的情况下将这个Web应用程序暴露给互联网,那么会发生不好的事情....

你不及格globalresult到thanks.html模板show_template()

你可能想要的

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

如果懒惰你也可以做

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

...虽然看起来你正在尝试重定向到感谢页面(?)。 在这种情况下,最好只是渲染感谢视图immediatley

例如,替换此行

return HttpResponseRedirect('/thanks/')

在上面的两条线中的任何一条都可以回答

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM