2014-07-04 22 views
0

我想执行各种命令并显示/处理他们的输出到Django模板。例如:如何在django中使用python库?

  • 我想ping主机(或IP)并查看它是否处于活动状态/已打开。然后在HTML页面上显示“ONLINE”
  • 我想执行一个whois到一个域,抓住所有者的国家,并将其显示在页面上
  • 我想执行nslookup或nmap并从输出中解析几件事

我正在寻找的所有东西都是一个想法。我卡在我的import subprocess里面views.py,不知道如何继续下去。我应该如何继续?

+1

确实很难分辨问题出在哪里。如果你想使用一个库,你可以导入它并使用它,就像任何代码一样。你的困惑在哪里? –

回答

1

从Django视图ping通的linux主机:

import subprocess 

def view(request): 
    try: 
     subprocess.check_call(['ping', '-c', '1', "1.2.3.4"]) 
    except subprocess.CalledProcessError: 
     host_online = False 
    else: 
     host_online = True 

    return render(request, "template.html", {'online': host_online,}) 

这将运行命令ping -c 1 1.2.3.4这将尝试一次只ping主机。如果成功,ping将返回代码0,如果不成功则返回1。 subprocess.check_call(...)将1或0转换为异常或无异常(分别)。

该解决方案将导致页面加载在ping过程中被阻止,如果主机实际上处于关闭状态,则该过程将持续几秒钟。如果这是一个问题,请考虑将ping放入通过AJAX从页面请求的视图中,一旦它加载完毕。

您可以为其他命令做类似的事情。

+0

“CalledProcessError”怎么样?我收到一条错误消息。 – Radolino

+0

请不要发布未经测试的代码。你错过了'CalledProcessError'的输入,IP地址后面的一个右括号']','host_online'总是'False',... –

+0

对不起,实际上没有试过这个代码,我*认为*我的编辑将解决你的问题。如果不是,我会在不使用手机时正确尝试! –