eric7/DebugClients/Python/SubprocessExtension.py

Sat, 15 Jan 2022 17:15:24 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 15 Jan 2022 17:15:24 +0100
branch
eric7
changeset 8921
8459c7e1b904
parent 8881
54e42bc2437a
permissions
-rw-r--r--

Debug Client
- fixed an issue handling string arguments for subprocess.run() on Windows platforms (handling of "")

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
8881
54e42bc2437a Updated copyright for 2022.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
3 # Copyright (c) 2020 - 2022 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 (
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
15 isPythonProgram, patchArguments, stringToArgumentsWindows,
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
16 isWindowsPlatform
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
17 )
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 _debugClient = None
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
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 def patchSubprocess(module, debugClient):
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 Function to patch the subprocess module.
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 @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
27 @type module
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @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
29 @type DebugClient
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 """ # __IGNORE_WARNING_D234__
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 global _debugClient
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 class PopenWrapper(module.Popen):
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 Wrapper class for subprocess.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 def __init__(self, arguments, *args, **kwargs):
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Constructor
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @param arguments command line arguments for the new process
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @type list of str or str
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @param args constructor arguments of Popen
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @type list
7563
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7424
diff changeset
45 @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
46 @type dict
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 """
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 if (
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 _debugClient.debugging and
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 _debugClient.multiprocessSupport and
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 isinstance(arguments, (str, list))
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 ):
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 if isinstance(arguments, str):
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 # convert to arguments list
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
55 arguments = (
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
56 stringToArgumentsWindows(arguments)
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
57 if isWindowsPlatform() else
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
58 shlex.split(arguments)
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
59 )
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 else:
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 # create a copy of the arguments
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 arguments = arguments[:]
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 ok = isPythonProgram(arguments[0])
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 if ok:
7875
12c621ed4377 SubprocessExtension: removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7873
diff changeset
65 scriptName = os.path.basename(arguments[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
66 if not _debugClient.skipMultiProcessDebugging(scriptName):
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 arguments = patchArguments(
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 _debugClient, arguments, noRedirect=True
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 )
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
71 super().__init__(arguments, *args, **kwargs)
7424
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 _debugClient = debugClient
9bb7d8b0f966 Implemented multi process debugging support for the 'subprocess' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 module.Popen = PopenWrapper

eric ide

mercurial