python paramkio sftp远程创建目录,这段代码是怎么执行的

发布于 2022-09-13 00:23:13 字数 949 浏览 20 评论 0

import os
import paramiko

def mkdir_p(sftp, remote_path):
    if remote_path == "/":
        # absolute path so change directory to root
        sftp.chdir("/")
        return
    if remote_path == "":
        # top-level relative directory must exists
        return
    try:
        # sub-directory exists
        sftp.chdir(remote_path)
    except IOError:
        dirname, basename = os.path.split(remote_path.rstrip("/"))
        mkdir_p(sftp, dirname)
        sftp.mkdir(basename)
        sftp.chdir(basename)
        
t = paramiko.Transport(("127.0.0.1", 22))
t.connect(username="root", password="123456")

sftp = paramiko.SFTPClient.from_transport(t)
mkdir_p(sftp, "/data/test/1/2/3/4")

这段代码会在远程服务器上创建目录"/data/test/1/2/3/4" ,远程服务器目录仅有/data/test/层级,经过断点,显示,sftp.chdir(remote_path)执行成功后,会执行sftp.mkdir(basename) sftp.chdir(basename)这两行代码,创建了/data/test/1目录,然后会继续重复执行这两行代码,创建2,3,4目录,请问下,这段代码为什么会这么执行?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

口干舌燥 2022-09-20 00:23:13

关键就在try/except那一段,你在那里下个断点逐步看一下就明白了。

mkdir_p模拟了linux“mkdir -p path”命令,可以自动创建路径中不存在的子文件夹。

函数初始参数为"/data/test/1/2/3/4",test之后的子文件夹不存在,所以在try中chdir会抛出异常,在except中把路径拆分成"/data/test/1/2/3"和“4”两个部分,用前面的值调用mkdir_p。
如此递归下去,直到“/data/test”,try无异常,服务器正常chdir,结束递归深入。

从上一次异常中mkdir_p往下执行,创建"/data/test/1"并chdir,然后一路递归返回,逐个创建后面的子文件夹并chdir。

孤独难免 2022-09-20 00:23:13

啊 难道不是递归了嘛?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文