2015-03-03 24 views
0

我已经安装了iftop,它现在可以在命令行上正常工作,当我尝试将它集成到Django中时,它根本不给我任何输出,但同时我没有得到错误。如何在Django中显示Iftop

views.py

def packets(request, template="linux_path/packets.html"): 

context = {} 
tcp_data = subprocess.Popen(['sudo', 'iftop','-i', 'eth1'], stdout=subprocess.PIPE) 
raw_packets = tcp_data.stdout.read() 
groups = [] 
for raw_packet in raw_packets.split("\n"): 

    tokens = re.match("[5:5]", raw_packet) 
    if tokens is None: 
     continue 
    else: 
     packet_name, packet_length = tokens.groups() 

    group = { 
     "packet_name":packet_name, 
     "packet_length":packet_length 
     } 
    groups.append(groups) 
return groups 

HTML

{% extends "base.html" %} 

{% block title %} 
    Packet Log 
{% endblock %} 

{% block content %} 

<table style="width: 100%"> 
    <thead> 
    <th>Name</th> 
    </thead> 
    <tbody> 

    <tr> 
     <td>{{function call here}}</td> 
    </tr> 

    </tbody> 
</table> 

{% endblock %} 

我也放在正确的代码在urls.py文件

什么情况是,该页面只是在加载时挂起,并没有进入我的packets.html页面

任何想法我做错了什么?

一旦我得到那个工作,然后我将能够使用RE操纵数据到我想要的格式。

我甚至在命令行中输入sudo密码时,该选项出现,但仍然是页面挂起。

回答

1

iftop使用ncurses,这意味着你不会用STDOUT捕获它。纵观help,您可以提供这个选项:

-t text output mode 
     Use text interface without ncurses and print the output to STDOUT. 

因此,尝试通过这个论点,它可能会解决你的问题。

虽然这里有一个问题,但您的网络服务器不应该被允许到sudo。这是一个严重的安全问题。您可以考虑制作一个非常简单的Django应用程序,该应用程序仅运行此命令,不处理任何其他数据以减少攻击面。

+0

很酷的感谢,sudo选项只是现在,所以我可以看到一些输出。一旦我开始看到输出,然后会改变它并将其添加到我的脚本文件中。我现在要看看ncurses。 – 2015-03-03 12:08:54

+0

这看起来很相关:http://stackoverflow.com/questions/8371877/ncurses-and-linux-pipeline-c – Joe 2015-03-03 13:47:01