7

我希望能够在我的手机和电脑之间传输文件。手机是可以运行python 2.5.4的智能手机,电脑运行windows xp(带有python 2.5.4和3.1.1)。

我想在手机上有一个简单的python程序,可以将文件发送到计算机并从计算机获取文件。电话端应该只在调用时运行,计算机端可以是服务器,但最好是不占用大量资源的东西。手机端应该能看清电脑上相关目录的内容。

目前,我通过在计算机上运行 Windows Web 服务器(呃)和带有 socket.set_default_access_point 的脚本(这样程序可以选择我的路由器的 ssid 或其他传输)和 urlretrieve(到获取文件)在手机上。我正在使用 smtplib 通过电子邮件以另一种方式发送文件。

建议将不胜感激,无论是一般想法、现有程序还是介于两者之间的任何内容。

4

3 回答 3

3

我会使用paramiko。它安全快速且非常简单。这个怎么样?

所以我们首先导入模块,并指定日志文件:

import paramiko
paramiko.util.log_to_file('/tmp/paramiko.log')

我们打开一个 SSH 传输:

host = "example.com"
port = 22
transport = paramiko.Transport((host, port))

接下来我们要进行身份验证。我们可以用密码来做到这一点:

password = "example101"
username = "warrior"
transport.connect(username = username, password = password)

另一种方法是使用 SSH 密钥:

import os
privatekeyfile = os.path.expanduser('~/.ssh/id_rsa')
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
username = 'warrior'
transport.connect(username = username, pkey = mykey)

现在我们可以启动 SFTP 客户端了:

sftp = paramiko.SFTPClient.from_transport(transport)

现在让我们将文件从远程拉到本地系统:

filepath = '/home/zeth/lenna.jpg'
localpath = '/home/zeth/lenna.jpg'
sftp.get(filepath, localpath)

现在让我们换一种方式:

filepath = '/home/zeth/lenna.jpg'
localpath = '/home/zeth/lenna.jpg'
sftp.put(filepath, localpath)

最后,我们需要关闭 SFTP 连接和传输:

sftp.close()
transport.close()

怎么样??对于这个例子,我必须对此表示赞赏。

于 2009-09-20T23:12:10.870 回答
1

我最终在手机上使用了 python 的 ftplib,在计算机上使用了 ftp 服务器 FileZilla。优点是高度简单,尽管可能存在安全问题。

万一有人关心,这里是发送和接收文件的客户端代码的胆量。实际实现有更多的基础设施。

from ftplib import FTP
import os

ftp = FTP()
ftp.connect(server, port)
ftp.login(user, pwd)

files = ftp.nlst() # get a list of files on the server
# decide which file we want

fn = 'test.py' # filename on server and for local storage
d = 'c:/temp/' # local directory to store file
path = os.path.join(d,fn)
r = ftp.retrbinary('RETR %s' % fn, open(path, 'wb').write)
print(r) # should be: 226 Transfer OK

f = open(path, 'rb') # send file at path
r = ftp.storbinary('STOR %s' % fn, f) # call it fn on server
print(r) # should be: 226 Transfer OK
f.close()

ftp.quit()
于 2009-09-21T22:18:09.127 回答
0

几个例子,但你必须记住,IIRC,PyBluez 只能在 Linux 上运行。

我以前做过与 OBEX 相关的事情,主要是从手机上获取东西,使用的是 obexftp 程序2,它是 OpenOBEX 项目3的一部分。当然,您可以从 Python 调用 obexftp 程序,并使用 os、popen2 和 subprocess 模块中的函数来解释响应和退出代码。我相信 obexftp 也支持“推送”模式,但如果不支持,您可能会找到与 OpenOBEX 相关的其他内容。

由于在 GNU/Linux 发行版和 Python 中使用套接字支持蓝牙通信(前提是检测并配置了蓝牙支持),您可以使用普通网络编程与手机通信,但这可能需要您自己实现 OBEX 协议 -由于多种原因,这不是一项简单的任务,包括我在下面提到的一个。因此,至少在最初使用 obexftp 可能更容易。

你也有lightblue,这是一个跨操作系统的蓝牙库。

还有一个完整的脚本,PUTools: Python Utility Tools for PyS60 Python(示例有 Windows 截图),它有:

Python 解释器,在 PC 上接受输入并显示输出,通过蓝牙连接到手机,并在手机上执行。您还可以获得电话的简单外壳功能(cd、ls、rm 等)。该工具还允许您将文件从 PC 同步到手机(在应用程序开发中非常有用)以及从手机同步到 PC(您的图像、您正在处理的程序中的日志文件等)。

于 2009-09-20T20:01:05.443 回答