【问题标题】:How do I use python libraries inside django?如何在 django 中使用 python 库?
【发布时间】:2014-08-26 00:14:10
【问题描述】:

我想执行各种命令并将它们的输出显示/处理到 django 模板。例如:

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

我正在寻找的只是一种思考的心态。我被困在views.py 中import subprocess 的位置,不知道如何继续。我应该如何继续?

【问题讨论】:

  • 很难说你的问题出在哪里。如果你想使用一个库,你导入它并使用它,就像任何代码一样。你的困惑在哪里?

标签: python django python-3.x subprocess


【解决方案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 从页面请求的视图中。

您可以对其他命令执行类似的操作。

【讨论】:

  • “CalledProcessError”怎么样?我收到一条错误消息。
  • 请不要发布未经测试的代码。您缺少CalledProcessError 的导入,IP 地址后的右括号]host_online 将始终为False,...
  • 抱歉,实际上没有尝试过代码,我认为我的编辑将解决您遇到的问题。不行的话,我不玩手机的时候好好试试!
  • 这难以置信(对我来说),它真的有效!我也会尝试使用 ajax 请求。如果您想解析一个 whois 的国家/地区,该怎么办?
  • 在python中有几种方法可以做whois。一种是采用类似的方法并与output = subprocess.check_output(['whois', ...]) 一起使用,然后自己解析生成的输出,但是对whois 做的最好的事情是使用pywhois 之类的东西。我也会建议 ping 的方法,但是 1. 从纯 python ping 需要 root privalages 和 2. 您在问题中询问子进程。
猜你喜欢
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 2014-01-24
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 2021-08-26
相关资源
最近更新 更多