这个问题与this one有关。我在python2中从CGI脚本打印原始二进制数据时没有问题,例如:#!/usr/bin/env python2
import os
if __name__ == '__main__':
with open(os.path.abspath('test.png'), 'rb') as f:
print "Content-Type: image/png\n"
print f.read()
以下是相关的响应标题:
^{pr2}$
结果就像预期的那样被解释成一个图像。但是,如果我尝试将其转换为Python 3:#!/usr/bin/env python
import os
import sys
if __name__ == '__main__':
with open(os.path.abspath('test.png'), 'rb') as f:
print("Content-Type: image/png\n")
sys.stdout.buffer.write(f.read())
不返回任何内容,以下是标题:> GET /cgi-bin/plot_string3.py HTTP/1.1
> User-Agent: curl/7.32.0
> Host: 0.0.0.0:8888
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 Script output follows
< Server: SimpleHTTP/0.6 Python/3.3.2
< Date: Fri, 13 Sep 2013 16:22:13 GMT
< �PNG
<
我不能再做print(f.read()),因为这样会打印出b'\x89PNG\r\n\x1a\n\x00...之类的内容。我链接的问题给出了一个解决方案,但显然在这种环境下不起作用。在
有什么想法?在This also means print is no good for CGI any more.