1

こんにちは、

リモート サーバー上のあるディレクトリから別のディレクトリにテスト ファイルをコピーしようとすると、常に次のエラーが発生します。

トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、ファイル "C:\Python27\lib\site-packages\paramiko-1.12.0-py2.7.egg\paramiko\sftp_client.py"、612 行目, in put file_size = os.stat(localpath).st_size WindowsError: [エラー 3] 指定されたパスが見つかりません: '/brass/prod/bin/chris/test1/km_cust'

コピーしようとしているファイルは km_cust と呼ばれます。

これらのコマンドを python 2.7 で実行しています。

ホスト名、uid、およびパスワードが汎用バージョンに変更され、実際のホスト名、uid、およびパスワードを使用して問題のボックスに SSH 接続し、すべての機能を実行できることに注意してください。

これが私のコードです:

import paramiko

s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect('hostname',username='test',password='pw')
filepath = '/brass/prod/bin/chris/test1/km_cust'
localpath = 'brass/prod/bin/chris/test2'

sftp = s.open_sftp()
sftp.put(filepath, localpath)

どんな助けでも感謝されます。他の情報が必要な場合はお知らせください。

4

1 に答える 1

1

問題は、ローカルファイル (つまり、Windows ボックス内のファイル) をサーバーにputコピーすることです。ドキュメントが言うように:

put(self, localpath, remotepath, callback=None, confirm=True)
Copy a local file (localpath) to the SFTP server as remotepath.

また、パスを逆方向に指定 (または少なくとも名前付け) していることに注意してください。ただし、どちらも実際にはローカル パスではないため、ここでは問題になりません。したがって、これを行うと:

sftp.put(filepath, localpath)

… Windows ボックスで名前が付けられたファイルを探しています'/brass/prod/bin/chris/test1/km_cust'が、もちろん、そのようなファイルは見つかりません。

リモート ファイルを別のリモート ファイルにコピーする場合は、次のようにする必要があります。

f = sftp.open(filepath)
sftp.putfo(f, localpath)

または:

f = sftp.open(localpath, 'wx')
sftp.getfo(filepath, f)

また、あなたfilepathは . で始まるはずだと思います/


ただし、これはおそらく最初からやりたかったことではありません。sftp 経由でリモート サーバーからリモート サーバーにファイルをコピーするには、すべてのバイトを Windows マシンにダウンロードしてから、それらをリモート マシンにアップロードする必要があります。より良い解決策は、マシンにコピー自体を行うように指示することです。

s.exec_command("cp '{}' '{}'".format(filepath, localfile))
s.close()

Channel最も些細なケース以外では、とその in/out/errに対処し、その終了ステータスを待つ必要があることに注意してください。しかし、この場合、あなたは大丈夫だと思います。

于 2013-11-04T21:49:58.000 に答える