簡體   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