在Web浏览器中显示Linux命令的输出 - Python

问题描述 投票:1回答:1

我正在运行基于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())

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

我究竟做错了什么

python python-3.x subprocess cgi
1个回答
0
投票

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

resolver = subprocess.Popen(['dig', hostname], stdout=subprocess.PIPE)
lookup_output = resolver.communicate()[0]
lookup = 'STDOUT:{}'.format(lookup_output)
© www.soinside.com 2019 - 2024. All rights reserved.