如何解决os.walk远程Linux服务器
是否有可能os.walk()
在没有任何第三方库的情况下读取远程Linux服务器的内容?
我知道在Windows上,我们可以使用UNC路径,例如:
os.walk(r"\\server\sharename\path\dir")
但是我们如何在Linux上做到这一点? (远程Linux服务器受到严格控制,没有安装Samba demon;本地计算机也受到严格控制,并且不允许安装任何第三方库,只有标准的Python 3.8库。)
解决方法
我们不能直接在远程机器上做 os.walk
。但是,我们可以编写一个类似的函数,不是完全相同的功能,而是在 open_sftp
、listdir_attr
和 paramiko
的帮助下尽力而为的方法。我试过的一个样本。
import paramiko
from stat import S_ISDIR
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('ip_address_remote_machine',username='username',password='password',banner_timeout=60)
sftp = client.open_sftp()
def sftpwalk(dl):
remotepath = dl
files = []
folders = []
for f in sftp.listdir_attr(remotepath):
if S_ISDIR(f.st_mode):
folders.append(f.filename)
#print(dl+f.filename)
sftpwalk(dl+f.filename+"/")
else:
# if
files.append(f.filename)
# print (path,folders,files)
print( remotepath,files)
dl= '/home/generic/Nizam/'
sftpwalk(dl)
client.close
这可以转到传递的远程路径,列出所有目录和文件。还可以尝试进一步增强。
在 Nizam 下,我有 dir1,dir2,dir3 和 dir1 有 dir11,dir12 和一些文件。
输出为:
(u'/home/generic/Nizam/dir2/',[],[])
(u'/home/generic/Nizam/dir1/dir12/',[])
(u'/home/generic/Nizam/dir1/dir11/',[u'11.txt'])
(u'/home/generic/Nizam/dir1/',[u'dir12',u'dir11'],[u'2.txt',u'1.txt',u'3.txt'])
(u'/home/generic/Nizam/dir3/',[])
('/home/generic/Nizam/',[u'dir2',u'dir1',u'dir3'],[])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。