This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: [pathlib] Option so that OSError does not block glob in pathlib library
Type: enhancement Stage:
Components: Library (Lib) Versions: Python 3.8
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: matt32106
Priority: normal Keywords:

Created on 2021-12-11 16:25 by matt32106, last changed 2022-04-11 14:59 by admin.

Messages (1)
msg408314 - (view) Author: matt (matt32106) Date: 2021-12-11 16:25
Hi there,
ISSUE DESCRIPTION
when I browse starting from the linux root ('/')
    path = pathlib.Path('/')
    _glob = '**/*'
    for p in path.glob(_glob):

The program stops on my machine because of OSError.
  File "/usr/lib/python3.8/pathlib.py", line 535, in _select_from
    entries = list(scandir_it)

OSError: [Errno 22] Invalid argument: '/proc/5916/task/5916/net'

****************************************
Entering post mortem debugging...
****************************************
> /usr/lib/python3.8/pathlib.py(535)_select_from()
    533         try:
    534             with scandir(parent_path) as scandir_it:
--> 535                 entries = list(scandir_it)
    536             for entry in entries:
    537                 if self.dironly:

I also another case is if a cloud drive is disconnected.

QUICK SOLUTION
I solved both issues for me by adding an adding an except OSError: return at the end of the two function below:

class _WildcardSelector(_Selector):
    def _select_from(self, parent_path, is_dir, exists, scandir):
        (...)
        except OSError:
            return

class _RecursiveWildcardSelector(_Selector):
    def _iterate_directories(self, parent_path, is_dir, scandir):
        (...)
        except OSError:
            return

FEATURE REQUEST
I don't know the consequences of those 2 modifications so perhaps they could follow an option when calling glob with an optional parameter ignoreOSerror = false by default?!
History
Date User Action Args
2022-04-11 14:59:53adminsetgithub: 90208
2021-12-11 16:25:35matt32106create