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)

もう 1 つの方法は、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 でのみ動作することに注意してください。

私は以前、OpenOBEX プロジェクト3の一部である obexftp プログラム2を使用して、OBEX 関連のことを行いました。主に携帯電話からの取得です。もちろん、Python から obexftp プログラムを呼び出し、os、popen2、および subprocess モジュールの関数を使用して応答と終了コードを解釈できます。obexftp も「プッシュ」モードをサポートしていると思いますが、OpenOBEX に関連していない場合は、おそらく何か他のものを見つけることができます。

Bluetooth 通信は GNU/Linux ディストリビューションと Python でソケットを使用してサポートされているため (Bluetooth サポートが検出され、構成されている場合)、単純なネットワーク プログラミングを使用して電話と通信できますが、これにはおそらく OBEX プロトコルを自分で実装する必要があります -いくつかの理由から、簡単な作業ではありません。したがって、少なくとも最初は obexftp を使用する方がおそらく簡単です。

また、クロス OS の Bluetooth ライブラリであるlightblueもあります。

完全なスクリプトPUTools: Python Utility Tools for PyS60 Python (例には Windows のスクリーンショットがあります) もあります。

入力を受け取り、PC で出力を表示し、Bluetooth 経由で電話に接続し、電話で実行する Python インタープリター。電話用の単純なシェル機能 (cd、ls、rm など) も利用できます。このツールを使用すると、PC から電話 (アプリケーション開発に非常に便利) と電話から PC (作業中のプログラムの画像、ログファイルなど) の両方でファイルを同期することもできます。

于 2009-09-20T20:01:05.443 に答える