Я нашел способ удалить удаленный каталог с помощью Paramiko на основе:
Как удалить все файлы в каталоге на удаленном SFTP-сервере в Python?
Однако, есликаталог не имеет допустимых разрешений, чем это не удалось бы. Я переместил удаление в блок исключения. Тем не менее, есть ли способ проверить, имеет ли каталог действительные разрешения на удаление?
В настоящее время я замечаю, что в рекурсивном каталоге, если один из подкаталогов не имеет разрешений на запись, произойдет сбой. удалить, но я хочу, чтобы удаление продолжалось и игнорировалось одно отсутствующее необходимое разрешение. Но, если сам корневой каталог не имеет допустимого разрешения, то выдается исключение и выдается с соответствующим кодом выхода.
Не могли бы вы помочь мне, как это сделать?
def rmtree(sftp, remotepath, level=0):
try:
for f in sftp.listdir_attr(remotepath):
rpath = posixpath.join(remotepath, f.filename)
if stat.S_ISDIR(f.st_mode):
rmtree(sftp, rpath, level=(level + 1))
else:
rpath = posixpath.join(remotepath, f.filename)
try:
sftp.remove(rpath)
except Exception as e:
print("Error: Failed to remove: {0}".format(rpath))
print(e)
except IOError as io:
print("Error: Access denied. Do not have permissions to remove: {0} -- {1}".format(remotepath, level))
print(io)
if level == 0:
sys.exit(1)
except Exception as e:
print("Error: Failed to delete: {0} -- {1}".format(remotepath, level))
print(e)
if level == 0:
sys.exit(1)
if level <= 2:
print('removing %s%s' % (' ' * level, remotepath))
try:
sftp.rmdir(remotepath)
except IOError as io:
print("Error: Access denied for deleting. Invalid permission")
print(io)
except Exception as e:
print("Error: failed while deleting: {0}".format(remotepath))
print(e)
return