我正在运行基于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将打印在网页中。
我究竟做错了什么
我找到了一个解决方案,以防将来有人需要它:
resolver = subprocess.Popen(['dig', hostname], stdout=subprocess.PIPE)
lookup_output = resolver.communicate()[0]
lookup = 'STDOUT:{}'.format(lookup_output)