Python 尝试将文件从一个目录复制到另一个目录时出现Getting WindowsError w/paramiko

Python 尝试将文件从一个目录复制到另一个目录时出现Getting WindowsError w/paramiko,python,linux,unix,paramiko,Python,Linux,Unix,Paramiko,下午好 每当我试图将测试文件从远程服务器上的一个目录复制到另一个目录时,我都会遇到以下错误: 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“C:\Python27\lib\site packages\paramiko-1.12.0-py2.7.egg\paramiko\sftp_client.py”,第612行,输入 file\u size=os.stat(localpath).st\u size WindowsError:[错误3]系统找不到指定的路径:'/brass/prod/

下午好

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

回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“C:\Python27\lib\site packages\paramiko-1.12.0-py2.7.egg\paramiko\sftp_client.py”,第612行,输入 file\u size=os.stat(localpath).st\u size WindowsError:[错误3]系统找不到指定的路径:'/brass/prod/bin/chris/test1/km_cust'

我要复制的文件名为km_cust

我正在Python2.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)
任何帮助都将受到感谢。如果需要任何其他信息,请告诉我。

问题是将本地文件(即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 box上查找名为
'/brass/prod/bin/chris/test1/km_cust'
的文件,当然它找不到这样的文件

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

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


另外,我猜您的
文件路径应该以
/
开头


然而,这可能不是你一开始想要做的。通过sftp将文件从远程服务器复制到远程服务器涉及将所有字节下载到Windows计算机,然后将其上载回远程计算机。更好的解决方案是让机器自己复制:

s.exec_command("cp '{}' '{}'".format(filepath, localfile))
s.close()
请注意,除了最简单的情况外,您还必须处理
通道及其in/out/err并等待其退出状态。但我相信,对于这种情况,您应该不会有问题。

问题是,您需要将一个本地文件(即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 box上查找名为
'/brass/prod/bin/chris/test1/km_cust'
的文件,当然它找不到这样的文件

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

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


另外,我猜您的
文件路径应该以
/
开头


然而,这可能不是你一开始想要做的。通过sftp将文件从远程服务器复制到远程服务器涉及将所有字节下载到Windows计算机,然后将其上载回远程计算机。更好的解决方案是让机器自己复制:

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

请注意,除了最简单的情况外,您还必须处理
通道及其in/out/err并等待其退出状态。但我相信对于这种情况,您应该没事。

在您连接的系统上是否确实有一个名为
/brass/prod/bin/chris/test1/km_cust
的文件?(请注意,如果用户
test
生活在chroot监狱中,您需要将其作为
test
检查,而不是作为
root
或您的正常登录名检查。)同时,您说要复制名为
test_cust
的文件,但错误消息是关于名为
km_cust
的文件。你确定这是你的实际代码吗?这可能是那些愚蠢的错误之一,你在文本编辑器中修复了路径,但没有保存文件,并运行了旧版本的脚本…我道歉,感谢你的快速评论。我测试的文件名为km_cust,我在本例中错误地更改了名称。还请注意,主机名、用户名和密码都已更改,但我目前可以用ssh将主机名、uid和密码连接到框中。我也调整了上面的例子。再次感谢您的帮助。您仍然没有回答最重要的问题:当您使用该主机名、uid和密码ssh连接到框上时,
filepath
指定的文件是否确实存在?这很重要,不是吗是的。该文件位于以下目录中:hostname:/brass/prod/bin/chris/test1/km_cust在您连接的系统上是否有名为
/brass/prod/bin/chris/test1/km_cust
的文件?(请注意,如果用户
test
生活在chroot监狱中,您需要将其作为
test
检查,而不是作为
root
或您的正常登录名检查。)同时,您说要复制名为
test_cust
的文件,但错误消息是关于名为
km_cust
的文件。你确定这是你的实际代码吗?这可能是那些愚蠢的错误之一,你在文本编辑器中修复了路径,但没有保存文件,并运行了旧版本的脚本…我道歉,感谢你的快速评论。我测试的文件名为km_cust,我在本例中错误地更改了名称。还请注意,主机名、用户名和密码都已更改,但我目前可以用ssh将主机名、uid和密码连接到框中。我也调整了上面的例子。再次感谢您的帮助。您仍然没有回答最重要的问题:当您使用该主机名、uid和密码ssh连接到框上时,
filepath
指定的文件是否确实存在?这很重要,不是吗是的。文件是locat