1

pysftp でファイルをコピーする際に問題が発生しています。これは元々、動作する WinSCP スクリプトでした。winscp.com および filezilla の以下のスクリプトで提供される資格情報を使用して、ファイルを手動でコピーできます。認証情報が正しく、リモート パスとローカル パスの両方が存在することを確認しました。ファイルはコピーされているように見えますが (ローカル ディレクトリにファイルが表示されます)、空です。以下はエラーです。他のホストに接続してファイルをダウンロードする場合も、同じスクリプトが機能します。

Traceback (most recent call last):
  File "C:\Users\myuser\pythonprograms\Download.py", line 28, in <module>
    main()
  File "C:\Users\myuser\pythonprograms\Download.py", line 25, in main
    sftp_download()
  File "C:\Users\myuser\pythonprograms\Download.py", line 21, in sftp_download
    sftp.get(rpath + item, lpath + item, preserve_mtime=True)
  File "C:\Python27\lib\site-packages\pysftp.py", line 233, in get
    self._sftp.get(remotepath, localpath, callback=callback)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 720, in get
    size = self.getfo(remotepath, fl, callback)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 689, in getfo
    file_size = self.stat(remotepath).st_size
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 413, in stat
    t, msg = self._request(CMD_STAT, path)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 729, in _request
    return self._read_response(num)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 776, in _read_response
    self._convert_status(msg)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 804, in _convert_status
    raise IOError(errno.EACCES, text)
IOError: [Errno 13] Permission denied

[Finished in 2.3s with exit code 1]

これは私のコードです:

import pysftp
from datetime import date
from datetime import timedelta

lpath = 'C:/local/path/in/'
rpath = '/remote/path/out/'
yymd = (date.today() - timedelta(days=1)).strftime('%Y%m%d')

with pysftp.Connection('host', username='u', password='p') as sftp:
    with sftp.cd():
        sftp.chdir(rpath)
        for item in sftp.listdir():
            if yymd + '.txt' in item:
                sftp.get(rpath + item, lpath + item, preserve_mtime=True)
4

1 に答える 1

1

そのようにしてみませんかgetfo(remotepath, flo, callback=None)

sftp.getfo (rpath + item, open(lpath + item, 'wb'))

これを見る

于 2015-09-22T01:47:15.003 に答える