diff --git a/Lib/fileinput.py b/Lib/fileinput.py index 721fe9c9612c17..363c241c50e988 100644 --- a/Lib/fileinput.py +++ b/Lib/fileinput.py @@ -189,6 +189,8 @@ def __init__(self, files=None, inplace=False, backup="", bufsize=0, mode="r", openhook=None): if isinstance(files, str): files = (files,) + elif isinstance(files, os.PathLike): + files = (os.fspath(files), ) else: if files is None: files = sys.argv[1:] diff --git a/Lib/test/test_fileinput.py b/Lib/test/test_fileinput.py index 565633fcccd97c..5df810c8f999b8 100644 --- a/Lib/test/test_fileinput.py +++ b/Lib/test/test_fileinput.py @@ -21,6 +21,7 @@ from io import BytesIO, StringIO from fileinput import FileInput, hook_encoded +from pathlib import Path from test.support import verbose, TESTFN, check_warnings from test.support import unlink as safe_unlink @@ -530,6 +531,20 @@ def test_iteration_buffering(self): self.assertRaises(StopIteration, next, fi) self.assertEqual(src.linesread, []) + def test_pathlib_file(self): + t1 = None + try: + t1 = Path(writeTmp(1, ["Pathlib file."])) + with FileInput(t1) as fi: + line = fi.readline() + self.assertEqual(line, 'Pathlib file.') + self.assertEqual(fi.lineno(), 1) + self.assertEqual(fi.filelineno(), 1) + self.assertEqual(fi.filename(), os.fspath(t1)) + finally: + remove_tempfiles(t1) + + class MockFileInput: """A class that mocks out fileinput.FileInput for use during unit tests"""