gpt4 book ai didi

python - 尝试将文件从一个目录复制到另一个 w/paramiko 时出现 Windows 错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:18 24 4
gpt4 key购买 nike

下午好

每当我尝试将测试文件从一个目录复制到远程服务器上的另一个目录时,我都会收到以下错误:

追溯(最近一次调用): 文件“”,第 1 行,位于 文件“C:\Python27\lib\site-packages\paramiko-1.12.0-py2.7.egg\paramiko\sftp_client.py”,第 612 行,在 put file_size = os.stat(本地路径).st_sizeWindowsError:[错误 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)

任何帮助将不胜感激。如果需要任何其他信息,请告诉我。

最佳答案

问题是 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 应该以 / 开头。


但是,这可能不是您最初想要做的。通过 sftp 将文件从远程服务器复制到远程服务器涉及将所有字节下载到您的 Windows 计算机,然后将它们上传回远程计算机。更好的解决方案是只告诉机器自己进行复制:

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

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

关于python - 尝试将文件从一个目录复制到另一个 w/paramiko 时出现 Windows 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19776780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com