【问题标题】:Show output of Linux commands in Web Browser - Python在 Web 浏览器中显示 Linux 命令的输出 - Python
【发布时间】:2019-02-19 10:58:22
【问题描述】:

我正在运行基于 Python 的 CGI 脚本,但在浏览器中打印“dig”命令的输出时遇到了困难。我使用 Idle 运行相同的脚本,它可以工作。

这是脚本:

#!/usr/bin/python3.5

#================================================================
# Modules

import cgi
import subprocess
import re

#================================================================
# Create HTML page

form = cgi.FieldStorage()

regex_url = re.compile(r'(^https?:\/\/)(.*?)(\/.*)')

url = form.getvalue('url')
origin = form.getvalue('origin')

print ("Content-type:text/html\r\n\r\n")

print ("<html>")
print ("<head>")
print ("<title>Lookup Tool</title>")
print ("<body>")

print ("<h1>DNS lookup tool</h1><br>")

print("<form method='post' action='/cgi-bin/test.py'>")
print("<p>Full URL including http/s: <input type='url' name='url'/></p>")
print("<p>Leave empty: <input type='text' name='origin'/></p>")
print("<input type='submit' value='Submit' />")
print("</form>")

host = regex_url.search(url)
hostname = host.group(2)

print("Hostname is: " + hostname )
resolver = subprocess.Popen(['dig', hostname], stdout=subprocess.PIPE)
print(resolver.communication())

我希望在网络浏览器中看到 dig www.google.com 的输出,但事实并非如此。但是,如果我执行“打印(主机名)”,那么 www.google.com 将打印在网页中。

我做错了什么

【问题讨论】:

  • dig 是一个命令行实用程序。我不明白你的意思是它会打印在网页上 - 你想用你的 python 脚本打开一个网络浏览器吗?在这种情况下,您必须在浏览器(chrome 或 firefox 或 .w.e)上调用 subprocess.Popen
  • @vasia 但我使用的是“Popen”。我希望在我的网页上看到这个输出:; > DiG 9.8.3-P1 > www.google.com ;;全局选项:+cmd ;;得到答案:;; ->>HEADER
  • 您的网页是什么意思?当我按原样运行您的脚本时,这就是我在 terminal 中得到的输出
  • @vasia 这是一个 CGI 脚本,在 Web 服务器上运行,因此它的输出可以出现在浏览器中。这是相当古老的技术,但对于简单的东西来说还是可以的。
  • .communicate 返回一个元组,您需要从中提取标准输出数据。 OTOH,我想你还是应该看到 something。此外,发送结构正确的 HTML 也是一个好主意:给它一个 doctype,关闭您的 headbody 标签等。

标签: python python-3.x subprocess cgi


【解决方案1】:

我找到了一个解决方案,以防将来有人需要它:

resolver = subprocess.Popen(['dig', hostname], stdout=subprocess.PIPE)
lookup_output = resolver.communicate()[0]
lookup = 'STDOUT:{}'.format(lookup_output)

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 2013-12-13
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2016-01-15
    • 2015-07-12
    相关资源
    最近更新 更多