2013-04-15 97 views
2

我们有一个test.py应显示一个.png文件和.txt文件在同一浏览器中。下面是我的代码:如何使用python显示.txt文件内容到浏览器

print "Content-type: image/png\n" 
print file(r"/var/www/cgi-bin/testpie.png", "rb").read() 
myurl = "file://var/www/html/test.txt" 

webbrowser.open(myurl) 

但我只得到.png在浏览器中的文件。那么如何在浏览器中使用python显示?

+2

直接使用'file()'很不寻常:建议使用'open()',这是打开文件的标准方式。此外,你不需要在路径中使用原始字符串,因为它不包含任何转义('\')字符。 – EOL

+0

你的代码混淆了两件事。 'webbrowser.open()'用于在运行脚本的同一台机器上的Web浏览器中打开一个URL。如果您在CGI/WSGI脚本中使用它,它不会影响作为客户端连接的Web浏览器;它会在_server_上打开一个浏览器。 – abarnert

回答

1

如果你想显示两种类型的数据,那么你需要:

  • 有两个单独的HTTP请求,其中一个可以嵌入在其它
  • 使用的数据格式(如HTML而不是文本,将PNG作为URI与data:方案一起嵌入)。

您无法同时返回文本文档和PNG图像。

0

您可以使用包含文本内容和图像的Python创建一个简单的HTML文件,并在浏览器中打开该文件。

4

浏览器显示HTML文档。 HTML文档可以包含div,span,p等标签中的文本,只需将文本包含在元素中即可。例如,<div>Hello!</div>显示文本Hello。但它们不直接包含图像;相反,它们包括链接到图像,作为img标记的src。例如,<img src="http://example.com/foo.png">显示foo.png图像。

所以,有两种方法可以做你想做的。


简单的方法是,以暴露2个资源(与单独的网址):(1)PNG图像,和(2)包含链接到PNG图像(和一个HTML页面包含文本直)。

例如...

testpie_image.py:

print "Content-type: image/png\n" 
print open(r"/var/www/cgi-bin/testpie.png", "rb").read() 

testpie.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> 

您好,我从excuting html文件,Python文件,当我在文本框中输入一些关键字,然后点击提交,然后它会EXCUTE蟒蛇文件。所以python文件生成两个文件1).png和2)文本文件。所以我的要求是当我点击HTML提交时立即在Web浏览器中显示.png和.txt文件。

好的,让我解释一下。

我假设你使用传统的表单提交连接到传统的CGI服务器。当您单击Web浏览器中的提交按钮时,会向构建HTML文档的CGI脚本发送请求。该文档包含文本文件,并且还包含链接到第二个CGI脚本的图像。您的网络浏览器通过第二个CGI的链接自动加载图像,该CGI生成并返回显示的PNG文件。因此,您可以在一个浏览器页面中看到图像和文本。


最后一件事:你可能不希望把文本文件,你的/ var/WWW层次里面,如果您使用的是data: URL你可能不希望把图像文件也有。

+0

嗨,我们需要在同一浏览器中使用python显示文本文件内容和png图像。 –

+0

@VittalCherala:我以为你已经知道如何打印文本文件。我编辑了答案以显示。 – abarnert

+0

耐心等待+1。 – maksimov

相关问题