本学期我正在做一个python类,我想以网页的形式向我的程序添加图形用户界面。部分我不能费心去学习Tkinter,部分我只是挑战自己,部分我只是喜欢用HTML / JS编写接口。
我知道使用SimpleHTTPServer创建HTTP服务器的基础知识,但我需要的是一种方法,我的网页可以将ajax命令发送到服务器上的python脚本,然后执行服务器端,然后接收脚本输出。有点像Sage做事情。
如何为SimpleHTTPServer创建一个扩展,然后我可以使用它来提供python脚本的输出?我需要一个非常通用的解决方案,所以在我编写任何python脚本的情况下,我可以轻松地将它包装在某种界面中,将它放在服务器的文件夹中,而不必用其它任何东西,只需用AJAX调用它,我的服务器将处理其余部分。
我目前的想法是拥有一个ServerSideScript
类,我的脚本可以扩展,只有一个名为output
的函数。我拥有的每个脚本都应该包含名为Script的ServerSideScript的子类。当要求服务器提供服务时,例如 foo.py ,它会注意到扩展名并执行以下操作:
if self.path[-3:]: == ".py":
return getScriptOutput(self.path)
...
def getScriptOutput(self, path):
from path import Script # obviously not going to work, since path is a string
return Script().output()
由于评论中指出的原因,这不起作用,我知道import_module函数之类的东西,但导入似乎是一种丑陋的方式来开始。
建议什么?
答案 0 :(得分:3)
Python附带电池; CGIHTTPServer
将使用CGI标准运行Python脚本:
CGIHTTPServer
模块定义了一个请求处理程序类,与BaseHTTPServer.BaseHTTPRequestHandler
兼容的接口,并且继承了SimpleHTTPServer.SimpleHTTPRequestHandler
的行为,但也可以运行CGI脚本。
只要它们具有.py
或.pyw
扩展名并且可执行,它就会运行Python脚本;映射到文件的其他路径被视为常规文件,而是提供其内容。
答案 1 :(得分:0)
你可能想看一下IPython notebooks - 它本质上为你提供了一个基于web的交互式Python shell,它甚至可以与matplotlib等集成。你可以将Python脚本保存为笔记本,在语句之间添加文本等。
如果您想共享输出,也可以使用nbviewer,而不是交互。