将Android手机作为稳定的web服务器运行(对于Python CGI脚本)

2024-05-18 06:11:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Android新手。我有一个Python程序,它既是一个CGI脚本,也是一个基于SMS的小型数据库交互系统。这是一个由基层组织管理的需求极低的系统(少数用户)。但它需要稳定性,即不存在随机崩溃或停机时间。出于各种原因,在Android手机上运行这个程序可以解决现有设置的一些问题。然而,在我开始之前,我想检查一下这种系统的可行性。它必须:

  • 运行可以执行CGI脚本的web服务器(普通CGI)
  • 响应SMSs
  • 处理SQlite数据库
  • 在Python中这样做(因为由于时间限制,将它移植到Java是不可行的)

在此阶段不需要与电话用户进行交互。

我知道需要的部分是存在的-web servers with CGISL4A等等,但是web服务器似乎主要是为了个人使用,SL4A清楚地声明它是"is alpha quality software"。各种各样的questions on SO relating to SL4A在这种用例上似乎也没有多大用处。他们专注于手机应用程序开发(比如this one)。

简而言之,这样一个体系会稳定吗?假设核心程序是健全的,我可以依赖它吗?


Tags: 用户程序服务器脚本web数据库系统时间
3条回答

用于在Android中运行Python CGI脚本。基本上你需要一个能够在Android平台上运行CGI脚本的web服务器,但是,我没有找到。您需要toy CGI脚本来适应Cherrypy web服务器,它可以在Android上运行。

步骤如下:

  1. 我们首先需要下载SL4A(r4)软件 Android(2.3)模拟器。它可以通过你的Android浏览器 去SL4A网站。现在在模拟器中安装软件。
  2. 然后从同一个SL4A站点安装Python for Android。会的 下载r4版本的apk。
  3. 启动SL4A应用程序并检查HelloWorld python脚本 跑步。它将确保您的安装是好的。
  4. 现在是安装Cherrypy库模块的时候了。可以找到它 在http://www.cherrypy.org/wiki/CherryPyDownload。我拿了3.2.0 版本。下载Python2.6的egg。
  5. 现在我们需要将egg文件传输到Android模拟器。使用adb push命令将egg文件传输到/mnt/sdcard/Download。
  6. 从模拟器启动Python for Android并点击Import modules。 它将列出新上传的egg文件。选择并安装。
  7. 现在我们可以编写一个Cherrypy脚本作为CGI运行。下面是 HelloWorld示例取自Cherrypy教程(稍作修改)
 # Import CherryPy global namespace
import cherrypy

class HelloWorld:
    """ Sample request handler class. """

    def index(self, **params):
        # CherryPy will call this method for the root URI ("/") and send
        # its return value to the client.
        for key in params:
            print key, '=', params[key]
        return "Hello world!"

    # Expose the index method through the web. CherryPy will never
    # publish methods that don't have the exposed attribute set to True.
    index.exposed = True
# CherryPy always starts with app.root when trying to map request URIs
# to objects, so we need to mount a request handler root. A request
# to '/' will be mapped to HelloWorld().index().
cherrypy.config.update({'server.socket_host': '127.0.0.1'})
cherrypy.config.update({'server.socket_port': 8080})
cherrypy.quickstart(HelloWorld(), '/')

8>;脚本需要传输到emulator中的/mnt/sdcard/sl4a/scripts目录。然后可以启动SL4A并点击脚本运行。如果在SL4A控制台中运行,则可以看到调试输出。

9>;在Android浏览器中,检查URL http://localhost:8080/。它会说“你好,世界”。

这是一个web服务器集,我们可以放置python脚本来访问Android手机数据和其他可以向外部客户端公开的东西。

贷记给:see the screen shots here

其他信息:

micro-httpd (GET / POST / CGI support) cross-compiled to Android

python-for-android

Running "Hello, world!" as a CGI Script

我的建议:

我建议在raspberry pi中使用任何轻量级web服务器(比如node.js)

参考号:

TLDR:CherryPy是一个可靠的服务器,Android可能足够可靠,可以在这些日子里构建服务器。


我曾经维护一个使用CherryPy和SL4A的项目(对于websockets使用ws4py)。

Cherrypy3.2.2在Python2.6和Python3.2上运行得非常好。

应用程序通常运行一两天。看起来如果它跑得长一点就可以了,但是在开发过程中它重新启动了很多。

CherryPy一直都很好,但Android设备有时会崩溃,所以SL4A会不时退出,需要重新启动。对于仅用作服务器的设备,这可能不是问题。对我来说,当设备通宵运行时,它总是稳定的,但当我正常使用设备时(它是我的实际手机),它偶尔会崩溃。所有这些都是在Galaxy SII上,那时Android还像这样的小车。

装樱桃糖很容易。它是纯Python,所以您可以将副本放到路径的某个位置并导入(您也不需要模拟器)。

你可能很难让设备保持清醒。如果它一个人呆着,它就会睡着。你可以告诉它在开发者选项中保持清醒,但我非常确定,只有在设备充电的情况下才有效。

更新:Android现在更加稳定,但是SL4A项目的工作已经差不多结束了。有一个叫做QPython的项目将SL4A作为一个更大的应用程序的一部分来维护,所以这些事情仍然可以完成。

这里是我的一篇博客文章的链接,描述了如何在10分钟内使用Py4A/SL4A在一个基本的CGI网络服务器中打开你的android手机http://matbaker.wordpress.com/2013/01/29/android-webserver-in-10-minutes/

相关问题 更多 >