Handle access errors scanning directories
Trying to read a directory that is visible but not accessible, or a symlink to a file in a directory that is not accessible will raise a PermissionError. Output these and then continue. If os.scandir() raises an exception then the finally block accesses "scanner" before it is assigned, raising an UnboundLocalError.
This commit is contained in:
parent
fc9c2b4a1d
commit
88a72ea14d
|
@ -3,6 +3,7 @@ import datetime
|
||||||
import itertools
|
import itertools
|
||||||
import os
|
import os
|
||||||
import queue
|
import queue
|
||||||
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
@ -29,7 +30,13 @@ def crawl_dir(dir, extensions, recursive=True, ignored=[]):
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
scanner = os.scandir(dir)
|
scanner = os.scandir(dir)
|
||||||
|
except Exception as e:
|
||||||
|
m = "Error while reading {}: {} {}\n".format(dir, e.__class__.__name__, e)
|
||||||
|
sys.stderr.write(m)
|
||||||
|
return
|
||||||
|
try:
|
||||||
for entry in scanner:
|
for entry in scanner:
|
||||||
|
try:
|
||||||
if entry.is_file():
|
if entry.is_file():
|
||||||
for e in extensions:
|
for e in extensions:
|
||||||
if entry.name.lower().endswith(".{}".format(e.lower())):
|
if entry.name.lower().endswith(".{}".format(e.lower())):
|
||||||
|
@ -39,6 +46,11 @@ def crawl_dir(dir, extensions, recursive=True, ignored=[]):
|
||||||
yield from crawl_dir(
|
yield from crawl_dir(
|
||||||
entry.path, extensions, recursive=recursive, ignored=ignored
|
entry.path, extensions, recursive=recursive, ignored=ignored
|
||||||
)
|
)
|
||||||
|
except Exception as e:
|
||||||
|
m = "Error while reading {}: {} {}\n".format(
|
||||||
|
entry.name, e.__class__.__name__, e
|
||||||
|
)
|
||||||
|
sys.stderr.write(m)
|
||||||
finally:
|
finally:
|
||||||
if hasattr(scanner, "close"):
|
if hasattr(scanner, "close"):
|
||||||
scanner.close()
|
scanner.close()
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Handle access errors scanning directories when importing files
|
Loading…
Reference in New Issue