浏览器显示 HTML 文档。HTML 文档可以在div
, span
,p
等标签中包含文本,只需将文本包含在元素中即可。例如,<div>Hello!</div>
显示文本Hello
。但它们不直接包含图像;相反,它们包含指向图像的链接src
,作为img
标签的 。例如,<img src="http://example.com/foo.png">
显示 foo.png 图像。
所以,有两种方法可以做你想做的事。
最简单的方法是公开两个资源(使用单独的 URL):(1) PNG 图像,以及 (2) 包含指向 PNG 图像的链接(并直接包含文本)的 HTML 页面。
比如……</p>
testpie_image.py:
print "Content-type: image/png\n"
print open(r"/var/www/cgi-bin/testpie.png", "rb").read()
测试派.py:
print """Content-type: text/html
<html><head></head><body>
<img src="testpie_image.py" />
<div>{}</div>
</body></html>
""".format(open(r"/var/www/html/test.txt").read())
现在,如果有人浏览到http://example.com/cgi-bin/testpie.py
,那将触发您的第二个脚本,因此他们将获得如下 HTML 页面:
<html><head></head><body>
<img src="testpie_image.py" />
<div>Blah blah this is my text file.</div>
</body></html>
然后,他们的浏览器将按照该链接指向http://example.com/cgi-bin/testpie-image.py
,这将触发您的第一个脚本,因此他们将获得 PNG 图像。
更难的方法是使用一种称为 的特殊 URL 方案data:
,它可以让您将数据嵌入内联,就好像它是指向单独资源的链接一样。您必须做更多的工作才能嵌入它,但这意味着您只需要一个 URL 而不是两个:
print """Content-type: text/html
<html><head></head><body>
<img src="data:image/png;base64,{}"</img>
<div>{}</div>
</body></html>
""".format(open(r"/var/www/cgi-bin/testpie.png", "rb").read().encode("base64"),
open(r"/var/www/html/test.txt").read())
现在,当有人浏览 时http://example.com/cgi-bin/testpie.py
,他们会得到一个这样的 HTML 页面:
<html><head></head><body>
<img src="data:image/png;base64,1Ab…
Z2y" />
<div>Blah blah this is my text file.</div>
</body></html>
嗨,我正在从 html 文件中执行 python 文件,当我在文本框中输入一些关键字并单击提交时,它将执行 python 文件。所以python文件生成两个文件1).png和2)文本文件。所以我的要求是当我在 html 中单击提交时,立即在网络浏览器中显示 .png 和 .txt 文件。
好的,让我解释一下。
我假设您正在使用连接到传统 CGI 服务器的传统表单提交。当您在 Web 浏览器中单击提交按钮时,这会向构建 HTML 文档的 CGI 脚本发送一个请求。该文档包含文本文件,还包含链接到第二个 CGI 脚本的图像。您的 Web 浏览器通过点击第二个 CGI 的链接自动加载图像,该 CGI 生成并返回 PNG 文件,该文件将被显示。因此,您可以在一个浏览器页面中看到图像和文本。
最后一件事:您可能不想将文本文件放在 /var/www 层次结构中,如果您使用的是data:
URL,您可能也不希望将图像文件放在那里。