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

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目录,请问下,这段代码为什么会这么执行?

阅读 4.7k
2 个回答

关键就在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。

啊 难道不是递归了嘛?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题