python paramkio sftp远程创建目录,这段代码是怎么执行的
import osimport 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