Простая передача файлов по Wi-Fi между компьютером и мобильным телефоном с помощью Python - PullRequest
5 голосов
/ 20 сентября 2009

Я хотел бы иметь возможность передавать файлы между моим мобильным телефоном и компьютером. Телефон представляет собой смартфон, который может работать с Python 2.5.4, а компьютер работает под управлением Windows XP (с Python 2.5.4 и 3.1.1).

Я хотел бы иметь на телефоне простую программу на Python, которая может отправлять файлы на компьютер и получать файлы с компьютера. Конец телефона должен работать только при вызове, компьютерный конец может быть сервером, хотя желательно то, что не использует много ресурсов. Конец телефона должен быть в состоянии выяснить, что находится в соответствующем каталоге на компьютере.

В данный момент я получаю файлы с компьютера на телефон, запустив на компьютере веб-сервер windows (ugh) и скрипт с socket.set_ default _ access_point (чтобы программа могла выбрать ssid или другой транспорт моего роутера) и urlretrieve (чтобы получить файлы) на телефоне. Я отправляю файлы другим способом по электронной почте, используя smtplib.

Буду признателен за предложения, будь то общая идея, существующие программы или что-то среднее.

Ответы [ 3 ]

3 голосов
/ 21 сентября 2009

Я бы использовал 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()

Как это ?? Я должен дать кредит для этого в качестве примера.

1 голос
/ 22 сентября 2009

В итоге я использовал ftplib для python на телефоне и FileZilla, на ftp-сервере, на компьютере. Преимущества - высокая степень простоты, хотя могут быть проблемы с безопасностью.

На случай, если кому-то все равно, вот код клиентской части для отправки и получения файлов. Реальная реализация имеет немного больше инфраструктуры.

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()
0 голосов
/ 21 сентября 2009

Есть пара примеров , но вы должны иметь в виду, что IIRC PyBluez будет работать только в Linux.

Ранее я занимался вещами, связанными с OBEX, в основном собирая вещи из мобильные телефоны, используя программу obexftp 2 , которая является частью Проект OpenOBEX 3 . Естественно, вы можете вызвать программу obexftp из Python и интерпретировать ответы и коды выхода, используя функции в модули os, popen2 и подпроцесса. Я считаю, что obexftp также поддерживает режим «push», но вы можете найти что-то еще связанные с OpenOBEX, если это не так.

Поскольку связь по Bluetooth поддерживается с использованием сокетов в GNU / Дистрибутивы Linux и Python (при условии поддержки Bluetooth обнаружен и настроен), вы можете общаться с телефонами, используя простое сетевое программирование, но это, вероятно, потребует от вас реализовать протоколы OBEX самостоятельно - непростая задача для ряд причин, в том числе один я упоминаю ниже. Таким образом, это вероятно, проще всего использовать obexftp хотя бы на начальном этапе.

У вас также есть lightblue , который представляет собой перекрестную библиотеку Bluetooth.

Существует также полный скрипт, PUTools: Инструменты-утилиты Python для PyS60 Python (в примерах есть скриншоты Windows), который имеет:

Интерпретатор Python, который принимает ввод и показывает вывод на ПК, подключается через Bluetooth к телефону и запускается на телефоне. Вы также получаете простую функциональность оболочки для телефона (cd, ls, rm и т. Д.). Инструмент также позволяет синхронизировать файлы как с ПК на телефон (очень полезно при разработке приложений), так и с телефона на ПК (ваши изображения, файлы журналов из программы, над которой вы работаете, и т. Д.).

...