一个执行python脚本的python服务器

时间:2013-10-18 17:17:52

标签: python server-side-scripting simplehttpserver

本学期我正在做一个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函数之类的东西,但导入似乎是一种丑陋的方式来开始。

建议什么?

2 个答案:

答案 0 :(得分:3)

Python附带电池; CGIHTTPServer将使用CGI标准运行Python脚本:

  

CGIHTTPServer模块定义了一个请求处理程序类,与BaseHTTPServer.BaseHTTPRequestHandler兼容的接口,并且继承了SimpleHTTPServer.SimpleHTTPRequestHandler的行为,但也可以运行CGI脚本。

只要它们具有.py.pyw扩展名并且可执行,它就会运行Python脚本;映射到文件的其他路径被视为常规文件,而是提供其内容。

您可能也对cgicgitb模块感兴趣,以帮助简化CGI脚本开发。

答案 1 :(得分:0)

你可能想看一下IPython notebooks - 它本质上为你提供了一个基于web的交互式Python shell,它甚至可以与matplotlib等集成。你可以将Python脚本保存为笔记本,在语句之间添加文本等。

enter image description here

如果您想共享输出,也可以使用nbviewer,而不是交互。