Попытка найти все.txt файлы из каталога и подкаталога

Этот код показывает проблему отказа в доступе. Я не хочу использовать функцию os.walk, чтобы получить все файлы и каталоги, которые я хочу получить без этого.

import os
import sys
test_path = "/"

def print_directory_contents(dir_path):
   for child in os.listdir(dir_path):
      path = os.path.join(dir_path, child)
      if os.path.isdir(path):
         print("FOLDER: " + "\t" + path)
         print_directory_contents(path)
      else:
        print("FILE: " + "\t" + path)

print_directory_contents(test_path)

       Output
Traceback (most recent call last):
  File "a.py", line 33, in <module>
print_directory_contents(test_path)
  File "a.py", line 26, in print_directory_contents
print_directory_contents(path)
  File "a.py", line 26, in print_directory_contents
print_directory_contents(path)
  File "a.py", line 22, in print_directory_contents
for child in os.listdir(dir_path):
  PermissionError: [Errno 13] Permission denied: '/tmp/pulse-
  PKdhtXMmr18n'

4 ответа

Как подсказывает @coldspeed, либо используйте "sudo", если ваш код ничего не пишет (вы можете убить вашу систему с ошибочным кодом), либо окружите соответствующий код с помощью try: ... except PermissionError с соответствующей регистрацией ошибок.

Проблема не в том, что вы не используете os.walk Дело в том, что у вас просто нет прав, необходимых для просмотра содержимого каталога /tmp/pulse- PKdhtXMmr18n.

Так как у вас нет root доступ, ваш единственный вариант - ловить и обрабатывать эти исключения по мере их поступления. Использовать try-except скобка, как так:

def print_directory_contents(dir_path):
   try:
       for child in os.listdir(dir_path):
          ...
   except PermissionError:
       pass

Поймать PermissionError (ошибка, возникающая при попытке получить доступ к файлу, к которому у вас нет разрешения). Вы можете войти или проигнорировать это, как я сделал здесь.

Поскольку вы используете / как путь, я предполагаю, что вы используете Linux. Вы должны добавить распечатку в ваш скрипт, чтобы отобразить путь, который вызывает проблему. Если это важная папка Linux, эта ошибка нормальная, если у скрипта нет привилегий root, поскольку доступ к таким папкам ограничен.(И Есть несколько таких директрис, например,/root)

Другие вопросы по тегам