我正在开发的应用程序的简单想法是用户给出 Linux 命令,Linux 命令的结果将显示在网络浏览器中。这是我的观点.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 获取输入,该输入由视图“ls”处理。作为用户,我只是使用 ls 命令进行测试。每当我按下 ls 命令时,它都会由 suprocess.call 处理并存储在 globalresult 中,稍后在 感谢.html 中调用。我的输出是 0。我做错了什么?这是thanks.html:
<h1>
{{ globalresult }}
</h1>
检查的文档你正在调用的函数 http://docs.python.org/2/library/subprocess.html#subprocess.call,结果是调用的返回码,而不是命令本身的输出。所以,我认为你的代码完全做了它应该做的事情。
也许您打算打电话子进程.check_output http://docs.python.org/2/library/subprocess.html#subprocess.check_output?
附带说明一下,要非常小心这种网络终端交互;如果你在没有适当安全性的情况下将此 Web 应用程序暴露到互联网上,就会发生不好的事情......但你可能知道这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)