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目录,请问下,这段代码为什么会这么执行?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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。
啊 难道不是递归了嘛?