检查Paramiko递归文件传输中是否下载了任何文件
Check if any file was downloaded in Paramiko recursive file transfer
我无法弄清楚为什么当 item
或 item.filename
(文件的绝对路径)为空时无法在此函数中获取退出代码 1?
def sftp_get_recursive(path, dest, sftp):
item_list = sftp.listdir_attr(path)
dest = str(dest)
if not os.path.isdir(dest):
os.makedirs(dest, exist_ok=True)
for item in item_list:
mode = item.st_mode
if not str(item) :
print(item.filename)
print("No file found")
sys.exit(1)
elif S_ISDIR(mode):
sftp_get_recursive(path + "/" + item.filename, dest + "/" + item.filename, sftp)
else:
sftp.get(path + "/" + item.filename, dest + "/" + item.filename)
print("Sending file from : ",path + "/" + item.filename)
sftp.remove(path + "/" + item.filename)
如果你想return特定的退出代码,如果目录树中的任何地方都没有文件,你将不得不递归地计算文件。
def sftp_get_recursive(path, dest, sftp):
count = 0
item_list = sftp.listdir_attr(path)
if not os.path.isdir(dest):
os.makedirs(dest, exist_ok=True)
for item in item_list:
source_path = path + "/" + item.filename
dest_path = os.path.join(dest, item.filename)
if S_ISDIR(item.st_mode):
count += sftp_get_recursive(source_path, dest_path, sftp)
else:
print("Sending file from : ", source_path)
sftp.get(source_path, dest_path)
sftp.remove(source_path)
count += 1
return count
(我稍微重构了你的代码以避免重复代码)
然后在顶层使用计数:
count = sftp_get_recursive(path, dest, sftp)
if count == 0:
print("No file found")
sys.exit(1)
请注意,即使没有找到文件,代码仍会在本地重新创建空的远程目录结构。我不确定,如果那是你想要的。
我无法弄清楚为什么当 item
或 item.filename
(文件的绝对路径)为空时无法在此函数中获取退出代码 1?
def sftp_get_recursive(path, dest, sftp):
item_list = sftp.listdir_attr(path)
dest = str(dest)
if not os.path.isdir(dest):
os.makedirs(dest, exist_ok=True)
for item in item_list:
mode = item.st_mode
if not str(item) :
print(item.filename)
print("No file found")
sys.exit(1)
elif S_ISDIR(mode):
sftp_get_recursive(path + "/" + item.filename, dest + "/" + item.filename, sftp)
else:
sftp.get(path + "/" + item.filename, dest + "/" + item.filename)
print("Sending file from : ",path + "/" + item.filename)
sftp.remove(path + "/" + item.filename)
如果你想return特定的退出代码,如果目录树中的任何地方都没有文件,你将不得不递归地计算文件。
def sftp_get_recursive(path, dest, sftp):
count = 0
item_list = sftp.listdir_attr(path)
if not os.path.isdir(dest):
os.makedirs(dest, exist_ok=True)
for item in item_list:
source_path = path + "/" + item.filename
dest_path = os.path.join(dest, item.filename)
if S_ISDIR(item.st_mode):
count += sftp_get_recursive(source_path, dest_path, sftp)
else:
print("Sending file from : ", source_path)
sftp.get(source_path, dest_path)
sftp.remove(source_path)
count += 1
return count
(我稍微重构了你的代码以避免重复代码)
然后在顶层使用计数:
count = sftp_get_recursive(path, dest, sftp)
if count == 0:
print("No file found")
sys.exit(1)
请注意,即使没有找到文件,代码仍会在本地重新创建空的远程目录结构。我不确定,如果那是你想要的。