Shi*_*dla 15 python ssh sftp paramiko
嗨我正在使用python并尝试连接到sftp并想从那里检索xml文件并需要放在我的本地系统中,下面是代码
import paramiko
sftpURL = 'sftp.somewebsite.com'
sftpUser = 'user_name'
sftpPass = 'password'
ssh = paramiko.SSHClient()
# automatically add keys without requiring human intervention
ssh.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
ssh.connect(sftpURL, username=sftpUser, password=sftpPass)
ftp = ssh.open_sftp()
files = ftp.listdir()
print files
Run Code Online (Sandbox Code Playgroud)
这里连接已成功完成,现在我想查看所有文件夹和所有文件,并需要输入所需的文件夹以从那里检索xml文件.
最后我的目的是在连接到sftp服务器后查看所有文件夹和文件.在上面的代码中我使用了ftp.listdir()
通过它获得输出,如下所示
['.bash_logout', '.bash_profile', '.bashrc', '.mozilla', 'testfile_248.xml']
Run Code Online (Sandbox Code Playgroud)
我想知道这些是否是唯一存在的文件?
我上面使用的命令也是查看文件夹的权利吗?
查看所有文件夹和文件的命令是什么
一个快速的解决方案是检查lstat
每个对象的输出ftp.listdir()
.
以下是列出所有目录的方法.
>>> for i in ftp.listdir():
... lstatout=str(ftp.lstat(i)).split()[0]
... if 'd' in lstatout: print i, 'is a directory'
...
Run Code Online (Sandbox Code Playgroud)
文件是相反的搜索:
>>> for i in ftp.listdir():
... lstatout=str(ftp.lstat(i)).split()[0]
... if 'd' not in lstatout: print i, 'is a file'
...
Run Code Online (Sandbox Code Playgroud)
在SFTPClient.listdir
返回的一切,文件和文件夹。
如果有文件夹,要从文件中告诉它们,请SFTPClient.listdir_attr
改用。它返回的集合SFTPAttributes
。
from stat import S_ISDIR, S_ISREG
Run Code Online (Sandbox Code Playgroud)
for entry in sftp.listdir_attr(remotedir):
mode = entry.st_mode
if S_ISDIR(mode):
print(entry.filename + " is folder")
elif S_ISREG(mode):
print(entry.filename + " is file")
Run Code Online (Sandbox Code Playgroud)
@ Oz123接受的答案效率低下。SFTPClient.listdir
内部调用SFTPClient.listdir_attr
并丢弃大多数信息,仅返回文件名和文件夹名。然后,答案通过调用SFTPClient.lstat
每个文件而无用且费力地重新检索所有数据。
另请参阅如何通过Paramiko获取目录中所有SFTP文件的大小。
强制性警告:请勿使用AutoAddPolicy
– 这样做会丢失针对MITM攻击的保护。有关正确的解决方案,请参见Paramiko“未知服务器”。
归档时间: |
|
查看次数: |
29052 次 |
最近记录: |