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

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


回答:

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


回答:

啊 难道不是递归了嘛?

以上是 python paramkio sftp远程创建目录,这段代码是怎么执行的 的全部内容, 来源链接: utcz.com/p/938006.html

回到顶部