可以在没有网络服务器的情况下,使用网页作为本地运行的Python程序的用户界面吗?
我有一个用Python写的程序,我想通过一个图形界面(GUI)让用户更方便地输入参数。我知道可以用Python的工具来创建GUI,但我想用一个HTML和JavaScript的页面,让JavaScript代码在用户点击按钮时调用我的Python脚本。大概是这样的:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "../scripts/python_script.py", true);
xmlhttp.send();
目前,当我这样做时,得到的只是Python脚本里的文本,但实际上并没有运行。理想情况下,Python脚本应该在后台运行,不会阻塞网页的其他输入,同时当脚本生成不同的结果文件(比如PNG图片)时,这些文件应该能在浏览器中显示。显然,我可以使用一个网络服务器来实现这个功能(而且我可能最终还是会这样做,所以才考虑HTML界面),但我在想有没有可能不使用服务器。这样我就可以把HTML页面和Python脚本打包在一起,给别人,让他们可以在自己的电脑上运行这个程序,而不需要启动一个网络服务器。这可能吗?
如果不行,有没有其他方法可以实现类似的效果?我能不能在Python脚本里嵌入一个小服务器,启动时显示HTML页面,然后响应一个XMLHttpRequest来启动Python脚本?如果我这样做,用户需要先启动脚本,然后再去浏览器输入指定的地址吗?
补充:我用SimpleHTTPServer找到了一个快速的解决方案,但我也看了看Bottle,可能会尝试用那个。谢谢你的帮助。
2 个回答
首先,使用像 bottle
这样的工具,搭建一个可以运行你脚本的网页服务器其实很简单。你可以查看这个链接了解更多信息:http://bottlepy.org/docs/dev/
一个不错的起点是这个代码示例:http://bottlepy.org/docs/dev/tutorial.html#http-request-methods。不过你需要创建一个表单来请求参数,而不是登录表单。然后只需运行你的Python脚本,获取输出,并在返回语句中发送回去。
这个问题 捕获子进程输出 展示了两种运行主脚本的方法,具体取决于你是想逐步显示输出,还是想在最后一次性显示所有输出。