2011-12-20 14 views
0

データベースからクエリ結果を取得し、ファイルに書き込んだり、別のサーバーにファイルを書き込んだりする小さなPythonスクリプトを作成しようとしています。作品はうまく動作しますが、書かれた直後にファイルをsftpしようとすると奇妙なエラーが発生します。Python/ParamikoでSFTPエラーが発生しました。

私は取得していますエラーが

File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 558, in put 
file_size = os.stat(localpath).st_size 
TypeError: coercing to Unicode: need string or buffer, file found 

は、コードの問題のある行がちょうど私が代わりに書き込まれているのOneの出力ファイルのコピーを使用してみました

sftp.put(outputfile, sftpoutputfile) 

ですスクリプトとそれが想定されていたとおりに正確に動作しました。私はfile.close()にファイルが書き込まれた後(そしてsftpを設定する前に)呼び出すので、ファイルがうまくいき、それ以降は使えるように思えます。誰かが私が間違っていることを教えてもらえますか?それが役に立つとすれば、もっとコードを投稿することができます。どうもありがとうございました。

答えて

1

エラーメッセージは、文字列型のオブジェクトが必要な場合(この場合はos.stat)、その代わりにファイルを指定していることを伝えています。

paramikoの私のコピーでsftp_client.pyのソースを見ると、我々はので、私はそれがファイル名ではなく、ファイル自体を望んでいることをかなり確信して

def put(self, localpath, remotepath, callback=None, confirm=True): 
    [...] 
    file_size = os.stat(localpath).st_size 
    fl = file(localpath, 'rb') 
    try: 
     fr = self.file(remotepath, 'wb') 
     fr.set_pipelined(True) 

を参照してください。

+0

ああ、私は見る - それを書くと、ファイルになり、文字列にはならない。私はあまりにも多くのPHPをやっている。迅速な対応をありがとうございます。 – moexu

関連する問題