首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用http.server显示python脚本中的动态网页

使用http.server显示python脚本中的动态网页
EN

Stack Overflow用户
提问于 2018-07-03 03:29:19
回答 1查看 900关注 0票数 2

我在本地使用我的mac上的python脚本

代码语言:javascript
复制
python3 -m http.server --cgi

我的脚本起作用了。我创建了一个图形和一个动态网页,并在新选项卡中打开该网页。我不喜欢的是,它在脚本地址处留下了一个空白窗口。所以当我用表单运行网页并点击submit时。我得到一个空白页面和一个新页面。我只想让它翻到新的一页。我是python的新手,所以我不太确定我做错了什么。下面是我的脚本:

代码语言:javascript
复制
#!/usr/bin/env python3

import pyromat as pm
import matplotlib.pyplot as plt
import numpy as np
import webbrowser

# Create a temperature array in steps of 10K
T = np.arange(300,2000,10)
# Get the Oxygen object
O2 = pm.get('ig.O2')

f = plt.figure(1)   # Call up figure 1
f.clf()         # clear it (if it already exists)
ax = f.add_subplot(111) # Create an axes object on the figure
ax.plot(T, O2.cp(T))    # Add a curve to that axes
ax.set_xlabel('Temperature (K)')
ax.set_ylabel('Specific Heat (kJ/kg/K)')
f.savefig('cp.png') # Make a file

f = open('test.html','w')

message = """<html>
<head></head>
<body><p>Graph Test</p><img src="cp.png"></body>
</html>"""

f.write(message)
f.close()

filename = 'file:///Users/pzb4/Documents/Environments/test.html'
webbrowser.open(filename,new=0,autoraise=True)

我的想法是创建一个表单,我可以在其中更改图形的输入。理想情况下,它只是重写表单页面,以便学生可以不断更改数据,并查看它如何影响图形。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-03 05:34:38

由于您将此脚本作为CGI脚本运行,因此可以写入标准输出:

代码语言:javascript
复制
#!/usr/bin/env python3

import pyromat as pm
import matplotlib.pyplot as plt
import numpy as np
import webbrowser
from io import BytesIO
import base64

# Create a temperature array in steps of 10K
T = np.arange(300,2000,10)
# Get the Oxygen object
O2 = pm.get('ig.O2')

f = plt.figure(1)   # Call up figure 1
f.clf()         # clear it (if it already exists)
ax = f.add_subplot(111) # Create an axes object on the figure
ax.plot(T, O2.cp(T))    # Add a curve to that axes
ax.set_xlabel('Temperature (K)')
ax.set_ylabel('Specific Heat (kJ/kg/K)')

image_bytes = BytesIO()

f.savefig(image_bytes, format="png") # write bytes to in-memory object
image_bytes.seek(0) # go to beginning of bytes

# print HTTP headers
print("Content-Type: text/html; charset=utf-8")
print()

# encode as Base64
src = base64.b64encode(image_bytes.read())

message = """<html lang="en"><head><title>Result</title></head>
<body><p>Graph Test</p><img src="data:image/png;base64,{}"></body></html>"""

# print HTML with embedded image
print(message.format(src))

这避免了将HTML或图像写入磁盘。相反,它将HTML写入标准输出(应该在浏览器中显示),并将图像作为Base64数据直接嵌入到HTML源中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51142617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档