Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-pysftp-get\u r from-Linux在Linux上运行良好,但在Windows上运行不好_Python_Linux_Windows_Sftp_Pysftp - Fatal编程技术网

Python-pysftp-get\u r from-Linux在Linux上运行良好,但在Windows上运行不好

Python-pysftp-get\u r from-Linux在Linux上运行良好,但在Windows上运行不好,python,linux,windows,sftp,pysftp,Python,Linux,Windows,Sftp,Pysftp,我想使用Python2.7,使用SFTP从Linux服务器向本地机器(包括Windows和Linux)递归地复制一个包含文件和子文件夹的完整目录结构 我能够ping服务器并使用WinSCP从同一台机器下载文件 我尝试了以下代码,在Linux上可以正常工作,但在Windows上不行 我尝试了\,/,os.join,都给了我相同的错误,还检查了权限 import os import pysftp cnopts = pysftp.CnOpts() cnopts.hostkeys = None

我想使用Python2.7,使用SFTP从Linux服务器向本地机器(包括Windows和Linux)递归地复制一个包含文件和子文件夹的完整目录结构

我能够ping服务器并使用WinSCP从同一台机器下载文件

我尝试了以下代码,在Linux上可以正常工作,但在Windows上不行

我尝试了
\
/
os.join
,都给了我相同的错误,还检查了权限

import os
import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None    # disable host key checking.
sftp=pysftp.Connection('xxxx.xxx.com', username='xxx', password='xxx', cnopts=cnopts)
sftp.get_r('/abc/def/ghi/klm/mno', 'C:\pqr', preserve_mtime=False)
File“”,第1行,在文件“C:\Python27\lib\site packages\pysftp\u init\u.py”中,第311行,在get\r preserve\u mtime=preserve\u mtime中)
文件“C:\Python27\lib\site packages\pysftp\u init\uu.py”,第249行,在get self.\u sftp.get(远程路径,本地路径,回调=回调)中
文件“C:\Python27\lib\site packages\paramiko\sftp_client.py”,第769行,在get中以fl:IOError:[Errno 2]没有这样的文件或目录:u'C:\\pqr\\./abc/def/ghi/klm/mno/.NFS000000061569F500004'

事实上,pysftp
get\r
在Windows上不起作用。它对远程SFTP路径使用
os.sep
os.path
函数,这是错误的,因为SFTP路径总是使用正斜杠

但您可以轻松实施便携式替换:

import os
from stat import S_ISDIR, S_ISREG
像这样使用它:

get_r_portable(sftp, '/abc/def/ghi/klm/mno', 'C:\\pqr', preserve_mtime=False) 

可能对守则作出的修改:


有关
put\r
的类似问题,请参阅:


旁注:请勿“禁用主机密钥检查”。你正在失去一种保护

有关正确的解决方案,请参阅

get_r_portable(sftp, '/abc/def/ghi/klm/mno', 'C:\\pqr', preserve_mtime=False)