2013-08-03 15 views
5

資格情報の初期化が解除された次のコードがあります。 ディレクトリリストの印刷は機能しますが、「get」は次の例外で失敗しますparamiko sftpエラーが発生する

プリフェッチでコードが抽出され、プリフェッチでコードとして機能するようになったため、プリフェッチに失敗しているようです。でる。

もっと良い解決策はありますか?

*** Caught exception: <type 'exceptions.IOError'>: [Errno 2] The message [/Inbox/CD.BAIINT.D130802.T200541.M856559] is not extractable! 
Traceback (most recent call last): 
    File "C:\Projects\Python\SFTP\SFTPHSC.py", line 71, in <module> 
    sftp.get(files, localpath + "/" + files) 
    File "build\bdist.win-amd64\egg\paramiko\sftp_client.py", line 676, in get 
    size = self.getfo(remotepath, fl, callback) 
    File "build\bdist.win-amd64\egg\paramiko\sftp_client.py", line 640, in getfo 
    file_size = self.stat(remotepath).st_size 
    File "build\bdist.win-amd64\egg\paramiko\sftp_client.py", line 337, in stat 
    t, msg = self._request(CMD_STAT, path) 
    File "build\bdist.win-amd64\egg\paramiko\sftp_client.py", line 689, in _request 
    return self._read_response(num) 
    File "build\bdist.win-amd64\egg\paramiko\sftp_client.py", line 736, in _read_response 
    self._convert_status(msg) 
    File "build\bdist.win-amd64\egg\paramiko\sftp_client.py", line 762, in _convert_status 
    raise IOError(errno.ENOENT, text) 
IOError: [Errno 2] The message [/Inbox/CD.BAIINT.D130802.T200541.M856559] is not extractable! 

username = '' 
password='' 
hostname ='' 
port=22 
localpath ="c:/BkFiles/" 
t = paramiko.Transport((hostname, port)) 

try: 
    t.connect(username=username, password=password) 
    sftp = paramiko.SFTPClient.from_transport(t) 

    dirlist = sftp.listdir('.') 
    print "Dirlist:", dirlist 

    sftp.chdir('Inbox') 
    dirlist = sftp.listdir('.') 
    print "Dirlist:", dirlist 

    for files in dirlist: 
     sftp.get(files, localpath + files) 
     print files 
except Exception, e: 
    print '*** Caught exception: %s: %s' % (e.__class__, e) 
    traceback.print_exc() 
finally: 
    try: 
     t.close() 
    except: 
     pass 
+0

は、あなたがこの資格証明書エラーであるかどうかをチェックすることがありますか?どのオペレーティングシステムを使用していますか?このスクリプトとは異なるUIDを使用しているプログラムによって、抽出しようとしているファイルが生成されていますか? – AlexLordThorsen

+0

資格情報が正しい。投稿時に言ったように、私はディレクトリ内のファイルを印刷することができます。また、私はsftp_client.pyからgetfo関数のコードをコピーし、プリフェッチの呼び出しをコメントアウトした後に直接呼び出すことで、この問題を解決することができました。 –

答えて

1

あなたが取得している特定のエラーは、あなたのトレースバックで見つけることができます。

elif code == SFTP_NO_SUCH_FILE: 
    raise IOError(errno.ENOENT, text) 

1)どうやら、あなたは、単に存在しないファイルをGET SFTPしようとしない、またはローカルマシン上のパスに保存している:Paramikoのsftp_client.py:760のソースコードを見てみます存在する。

for files in dirlist: 
    print ' -> Attempting to download: "{}", and saving it {}'.format(files, localpath + files) 
    sftp.get(files, localpath + files) 
print files 

2)パスのデフォルトのパラメータがすでに'.'あるので、あなたはsftp.listdir()sftp.listdir('.')を短縮することができます:あなたがダウンロードしているパスをプリントアウトすると、あなたはそれを保存している場所、あなたのコードを変更してみてください。

3)あなたも、さらにデバッグ用の宛先ファイルのSTATをプリントアウトすることもできます。

for files in dirlist: 
    print ' -> Attempting to download: "{}", and saving it {}'.format(files, localpath + files) 
    print ' --> remotepath stat: {}'.format(sftp.stat(files)) 
    sftp.get(files, localpath + files) 
    print files 
関連する問題