class _ScriptTarget(_ExecutableTarget):
def __init__(self, target):
- self._target = self._safe_realpath(target)
-
- if not os.path.exists(self._target):
- print(f'Error: {target} does not exist')
- sys.exit(1)
- if os.path.isdir(self._target):
- print(f'Error: {target} is a directory')
- sys.exit(1)
+ self._check(target)
+ self._target = os.path.realpath(target)
# If PYTHONSAFEPATH (-P) is not set, sys.path[0] is the directory
# of pdb, and we should replace it with the directory of the script
if not sys.flags.safe_path:
sys.path[0] = os.path.dirname(self._target)
- def __repr__(self):
- return self._target
-
@staticmethod
- def _safe_realpath(path):
+ def _check(target):
"""
- Return the canonical path (realpath) if it is accessible from the userspace.
- Otherwise (for example, if the path is a symlink to an anonymous pipe),
- return the original path.
-
- See GH-142315.
+ Check that target is plausibly a script.
"""
- realpath = os.path.realpath(path)
- return realpath if os.path.exists(realpath) else path
+ if not os.path.exists(target):
+ print(f'Error: {target} does not exist')
+ sys.exit(1)
+ if os.path.isdir(target):
+ print(f'Error: {target} is a directory')
+ sys.exit(1)
+
+ def __repr__(self):
+ return self._target
@property
def filename(self):