个性化阅读
专注于IT技术分析

使用Python,Twisted和Django通过Android手机控制笔记本电脑

本文概述

介绍

展示你的Android或Python编程技能总是很有趣。不久前, 我认为尝试通过Android移动设备控制笔记本电脑很酷。想一想:远程笔记本电脑访问, 包括能够播放和暂停音乐, 开始和停止编程工作或下载等, 所有这些都可以通过从手机发送消息来实现。整洁吧?

在继续阅读之前, 请记住, 这是一个尚处于初期阶段的宠物项目, 但是基本平台已经存在。通过融合一些主流工具, 我能够设置自己的Android手机以通过Python解释器控制笔记本电脑。

顺便说一句:该项目是开源的。你可以在此处签出客户端代码, 并在此处签出服务器代码。

远程笔记本电脑访问工具带:Python, Twisted, Django和Amarok

该项目涉及以下技术, 你可能对其中的一些技术很熟悉, 其中的一些特定于手头的任务:

  • Python 2.7以上
  • Twisted:一个出色的事件驱动框架, 专门为网络黑客设计。
  • Django:我使用的是v1.4, 因此如果要运行较低版本的文件, 则必须调整某些文件的位置。
  • Amarok:可管理的D-BUS(请参见下文)。如果你知道其他媒体播放器的消息传递结构, 则可以用其他媒体播放器(Clementine, VLC或任何支持MPRIS的介质)来消除这种情况。我之所以选择Amarok, 是因为它默认情况下随我的KDE发行版一起提供。另外, 它快速且易于配置。
  • 安装了适用于Android的Python的Android手机(详情请参见下文)。这个过程非常简单-即使对于Py3k!
  • 远程Amarok和远程Amarok Web。

高层

总体而言, 我们认为Android手机是客户端, 笔记本电脑是服务器。我将在下面深入介绍这种远程访问体系结构, 但是该项目的基本流程如下:

  1. 用户在Python解释器中输入一些命令。
  2. 该命令将发送到Django实例。
  3. 然后, Django将命令传递给Twisted。
  4. Twisted然后解析该命令, 该命令通过D-Bus向Amarok发送新命令。
  5. Amarok与实际的笔记本电脑进行交互, 控制音乐的播放/暂停。
使用此工具带,学习如何使用Python,Twisted和Django控制笔记本电脑。

现在, 让我们深入。

Android上的Python

因此, 有一天, 我开始研究可以在Android手机(当时为Droid 2)上运行的Python解释器。不久之后, 我发现了出色的SL4A软件包, 该软件包使Python For Android栩栩如生。这是一个非常漂亮的程序包:你单击几个按钮, 突然在移动设备或平板设备上有了一个几乎功能完整的Python环境, 该环境可以同时运行良好的Python代码并访问Android API(我之所以说是因为丢失, 并且无法100%访问Android API, 但是对于大多数用例来说, 这就足够了)。

如果愿意, 你还可以构建自己的Python发行版以在你的Android设备上运行, 其优点是你可以随后运行所需的任何版本的解释器。该过程涉及交叉编译要在ARM(Android设备和其他平板电脑上使用的体系结构)上运行的Python。这并不容易, 但肯定是可行的。如果你准备迎接挑战, 请在此处或此处查看。

设置好解释器后, 你就可以通过将Python与Android API结合使用来完成几乎所有你想做的事情, 包括远程控制笔记本电脑。例如, 你可以:

  • 发送和阅读短信。
  • 通过urllib和其他库与Internet上的第三方API进行交互。
  • 显示本机的外观提示, 旋转对话框等。
  • 更改你的铃声。
  • 播放音乐或视频。
  • 与蓝牙交互-特别是蓝牙, 它为许多机会铺平了道路。例如, 我曾经玩过用手机作为笔记本电脑的储物柜解锁应用程序(例如, 当手机在附近时, 通过蓝牙解锁笔记本电脑)。

如何使用手机控制笔记本电脑

架构

我们的项目组成如下:

  • 如果你想测试服务器代码(如下)(而不必完全运行Django应用程序), 则在Twisted上构建的客户端应用程序。

  • 服务器端Django应用程序, 该应用程序从Android设备读取命令并将其传递给Twisted。就目前情况而言, Amarok是服务器可以与之交互(即控制音乐)的唯一便携式计算机应用程序, 但这是足够的概念证明, 因为该平台易于扩展。

  • 服务器端Twisted”实例”通过D-Bus与笔记本电脑的媒体播放器进行通信, 并从Django传入命令时发送这些命令(当前, 我支持”下一个”, “上一个”, “播放”, “暂停”, ‘停止’和’静音’)。为什么不直接将命令从Django直接传递给Amarok? Twisted的事件驱动, 非阻塞属性消除了线程的所有辛苦工作(更多内容请参见下文)。如果你有兴趣将两者结合使用, 请参见此处。

Twisted非常出色, 是事件驱动的, 功能多样。它使用回调系统, 延迟对象和其他一些技术进行操作。我绝对建议你尝试一下:使用Twisted避免的工作量令人印象深刻。例如, 它为许多协议提供样板代码, 包括IRC, HTTP, SSH等, 而无需处理非阻塞机制(线程, 选择等)。

  • 客户端Android代码使用自定义URL上传到你的设备, 以访问Django应用程序。值得一提的是, 这段特定的代码可以在Python 2.7+上运行, 包括Py3k。

什么是D-Bus?

我已经多次提到D-Bus, 因此可能值得更详细地讨论。广义上讲, D-Bus是一种消息传递总线系统, 可通过特制消息轻松地在应用程序之间(例如笔记本电脑和Android手机上)进行通信。

它主要由两条总线组成:系统总线, 用于系统范围的内容;和会话总线, 用于用户空间。发送到系统总线的典型消息是”嘿, 我已经添加了新打印机, 通知启用了D-Bus的应用程序新打印机已联机”, 而应用程序之间的典型进程间通信(IPC)将进入会话总线。

我们使用会话总线与Amarok进行通信。大多数现代应用程序(至少在Linux环境下)很可能会支持此类消息传递, 并且通常可以很好地记录它们可以处理的所有命令/功能。由于任何具有D-Bus支持的应用都可以在此架构下进行控制, 因此可能性几乎是无限的。

更多信息可以在这里找到。

幕后花絮:

设置完所有基础结构之后, 你可以启动Android应用程序, 它将进入无限循环以读取传入的消息, 并通过一些完整性检查处理它们, 如果有效, 则将它们发送到预定义的URL(即URL)。 Django应用程式), 依次处理输入并采取相应的行动。然后, Android客户端将消息标记为已读, 并且循环继续进行, 直到处理了具有确切内容” exitclient”(聪明, 是吧?)的消息, 在这种情况下, 客户端将退出。

在服务器上, Django应用程序选择要处理的命令, 并检查其是否以有效指令开头。如果是这样, 它将连接到Twisted服务器(使用Telnetlib通过telnet连接)并一起发送命令。最后, Twisted解析输入, 将其转换为适合Amarok的内容, 然后让Amarok发挥其魔力!最后, 你的笔记本电脑会通过播放歌曲, 暂停, 跳过等方式做出响应。

关于”预定义的URL”:如果要远程控制计算机, 则必须是公共URL(可通过Internet访问)。请注意, 目前, 该代码尚未实现任何安全性层(SSL等), 目前, 此类改进仅供读者使用。

我还能做什么呢?

到目前为止, 一切看起来都很简单, 是吗?你可能会问自己:”是否可以扩展它以支持漂亮的功能[X]?”答案是:是(可能)!既然你知道如何使用手机正确地与计算机进行交互, 则可以补充服务器端代码以执行所需的任何操作。在不知不觉中, 你将远程射击计算机上冗长的过程。或者, 如果你可以处理电子设备, 则可以在计算机和你喜欢的设备之间建立接口, 并通过SMS指令进行控制(想到”给我喝咖啡!”)。

下一步是什么

我将继续玩我的Android笔记本电脑控制玩具一段时间, 以改善其功能, 修复错误等。但是, 如果你有兴趣, 我很乐意为你提供帮助!只需派生存储库并发送任何拉取请求即可。

如有任何疑问, 请给我发送电子邮件至[受电子邮件保护], 我们将竭诚为你服务。

赞(0)
未经允许不得转载:srcmini » 使用Python,Twisted和Django通过Android手机控制笔记本电脑

评论 抢沙发

评论前必须登录!