src/eric7/DebugClients/Python/SubprocessExtension.py

Fri, 08 Mar 2024 16:08:43 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 08 Mar 2024 16:08:43 +0100
branch
server
changeset 10633
dda7e43934dc
parent 10627
40b3df5b933a
child 11088
0299c9ba1c6f
permissions
-rw-r--r--

Corrected some code formatting and coding style issues.

7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3 # Copyright (c) 2020 - 2024 Detlev Offenbach <detlev@die-offenbachs.de>
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a function to patch subprocess.Popen to support debugging
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 of the process.
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import os
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import shlex
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
14 from DebugUtilities import (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
15 isPythonProgram,
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
16 isWindowsPlatform,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
17 patchArguments,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
18 stringToArgumentsWindows,
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
19 )
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 _debugClient = None
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 def patchSubprocess(module, debugClient):
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 Function to patch the subprocess module.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
27
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @param module reference to the imported module to be patched
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @type module
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param debugClient reference to the debug client object
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @type DebugClient
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
32 """ # __IGNORE_WARNING_D234__
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 global _debugClient
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
34
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 class PopenWrapper(module.Popen):
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Wrapper class for subprocess.Popen.
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
39
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
40 def __init__(self, args, *popenargs, **kwargs):
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
43
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
44 @param args command line arguments for the new process
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @type list of str or str
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
46 @param popenargs constructor arguments of Popen
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @type list
7563
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7424
diff changeset
48 @param kwargs constructor keyword only arguments of Popen
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @type dict
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 """
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
52 _debugClient.debugging
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
53 and _debugClient.multiprocessSupport
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
54 and isinstance(args, (str, list))
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 ):
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
56 if isinstance(args, str):
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 # convert to arguments list
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
58 args = (
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
59 stringToArgumentsWindows(args)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
60 if isWindowsPlatform()
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
61 else shlex.split(args)
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
62 )
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 else:
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 # create a copy of the arguments
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
65 args = args[:]
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
66 ok = isPythonProgram(args[0])
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 if ok:
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
68 scriptName = os.path.basename(args[0])
7901
6ff7ccf0cb50 Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7875
diff changeset
69 if not _debugClient.skipMultiProcessDebugging(scriptName):
10633
dda7e43934dc Corrected some code formatting and coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10627
diff changeset
70 args = patchArguments(_debugClient, args, noRedirect=True)
9611
af03537d56b2 Modified SubprocessExtension of the Python debugger to reset the subprocess 'shell=True' because it interferes with the debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
71 if "shell" in kwargs and kwargs["shell"] is True:
af03537d56b2 Modified SubprocessExtension of the Python debugger to reset the subprocess 'shell=True' because it interferes with the debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
72 # shell=True interferes with eric debugger
af03537d56b2 Modified SubprocessExtension of the Python debugger to reset the subprocess 'shell=True' because it interferes with the debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
73 kwargs["shell"] = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
74
10627
40b3df5b933a Fixed an issue with the MultiProcess extension for the subprocess module causing Popen to fail when the first argument was passed as a keyword (see issue 550).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
75 super().__init__(args, *popenargs, **kwargs)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
76
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 _debugClient = debugClient
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 module.Popen = PopenWrapper

eric ide

mercurial