下午好,
每当我尝试将测试文件从一个目录复制到远程服务器上的另一个目录时,我都会收到以下错误:
追踪(最近一次通话): 文件“”,第1行,in 文件“C:\ Python27 \ lib \ site-packages \ paramiko-1.12.0-py2.7.egg \ paramiko \ sftp_client.py”,第612行,放入 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)
任何帮助都会得到帮助。如果需要任何其他信息,请与我们联系。
答案 0 :(得分:1)
问题是put
将本地文件(即Windows框中的文件)复制到服务器。正如文档所说:
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
应该以{{1}}开头。
然而,这可能不是你想要做的第一个。通过sftp将文件从远程服务器复制到远程服务器涉及将所有字节下载到Windows计算机,然后将它们上载回远程计算机。更好的解决方案是告诉机器自己复制:
/
请注意,除了最微不足道的情况之外,您将不得不处理s.exec_command("cp '{}' '{}'".format(filepath, localfile))
s.close()
及其输入/输出/错误并等待其退出状态。但我相信,对于这种情况,你应该没事。