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: [Error 3] The system cannot find the path specified: '/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)

…它正在寻找一个'/brass/prod/bin/chris/test1/km_cust'在你的 Windows 机器上命名的文件,当然它找不到这样的文件。

如果要将远程文件复制到不同的远程文件,则需要执行以下操作:

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()

请注意,除了最微不足道的情况外,您将不得不处理 theChannel及其 in/out/err 并等待其退出状态。但我相信对于这种情况,你应该没问题。

于 2013-11-04T21:49:58.000 回答