Skip to content

Commit 2a9887f

Browse files
Unify process to pid
1 parent 9ddd100 commit 2a9887f

File tree

1 file changed

+33
-45
lines changed

1 file changed

+33
-45
lines changed

Lib/pdb.py

Lines changed: 33 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,27 @@ def _get_asyncio_task(self):
709709
task = None
710710
return task
711711

712+
def _get_pid_from_process(self, process):
713+
"""process could be a subprocess.Popen, multiprocessing.Process or a pid
714+
"""
715+
# They are not used elsewhere so do a lazy import
716+
from multiprocessing import Process
717+
from subprocess import Popen
718+
719+
try:
720+
process = self._getval(process)
721+
except:
722+
# Error message is already displayed
723+
return None
724+
725+
if isinstance(process, (Process, Popen)):
726+
return process.pid
727+
elif isinstance(process, int):
728+
return process
729+
730+
self.error(f"Invalid process {process}")
731+
return None
732+
712733
def interaction(self, frame, tb_or_exc):
713734
# Restore the previous signal handler at the Pdb prompt.
714735
if Pdb._previous_sigint_handler:
@@ -1967,32 +1988,16 @@ def do_attach(self, process):
19671988
Attach to process, which can be a subprocess.Popen,
19681989
multiprocessing.Process or a pid.
19691990
"""
1970-
import multiprocessing
1971-
import subprocess
1972-
1973-
try:
1974-
process = self._getval(process)
1975-
except:
1976-
# Error message is already displayed
1977-
return
1991+
pid = self._get_pid_from_process(process)
19781992

1979-
if isinstance(process, subprocess.Popen):
1980-
pid = process.pid
1981-
elif isinstance(process, multiprocessing.Process):
1982-
pid = process.pid
1983-
elif isinstance(process, int):
1984-
pid = process
1985-
else:
1986-
self.error("Invalid process: %s" % process)
1987-
return
1988-
1989-
self.message(f"Attaching to process {pid}")
1990-
try:
1991-
attach(pid)
1992-
except Exception as e:
1993-
self._error_exc()
1994-
return
1995-
self.message(f"Detached from process {pid}")
1993+
if pid is not None:
1994+
self.message(f"Attaching to process {pid}")
1995+
try:
1996+
attach(pid)
1997+
except Exception as e:
1998+
self._error_exc()
1999+
return
2000+
self.message(f"Detached from process {pid}")
19962001

19972002
def do_quit(self, arg):
19982003
"""q(uit) | exit
@@ -2961,26 +2966,9 @@ def detach(self):
29612966
pass
29622967

29632968
def do_attach(self, process):
2964-
import multiprocessing
2965-
import subprocess
2966-
2967-
try:
2968-
process = self._getval(process)
2969-
except:
2970-
# Error message is already displayed
2971-
return
2972-
2973-
if isinstance(process, subprocess.Popen):
2974-
pid = process.pid
2975-
elif isinstance(process, multiprocessing.Process):
2976-
pid = process.pid
2977-
elif isinstance(process, int):
2978-
pid = process
2979-
else:
2980-
self.error("Invalid process: %s" % process)
2981-
return
2982-
2983-
self._send(attach=pid)
2969+
pid = self._get_pid_from_process(process)
2970+
if pid is not None:
2971+
self._send(attach=pid)
29842972

29852973
def do_debug(self, arg):
29862974
# Clear our cached list of valid commands; the recursive debugger might

0 commit comments

Comments
 (0)