Debugger/DebuggerInterfacePython.py

changeset 6633
c5aab2ede19a
parent 6631
0a2f0feac79d
child 6645
ad476851d7e0
equal deleted inserted replaced
6632:084880ed940c 6633:c5aab2ede19a
107 if remote2local: 107 if remote2local:
108 return fn.replace(self.translateRemote, self.translateLocal) 108 return fn.replace(self.translateRemote, self.translateLocal)
109 else: 109 else:
110 return fn.replace(self.translateLocal, self.translateRemote) 110 return fn.replace(self.translateLocal, self.translateRemote)
111 111
112 def __startProcess(self, program, arguments, environment=None): 112 def __startProcess(self, program, arguments, environment=None,
113 workingDir=None):
113 """ 114 """
114 Private method to start the debugger client process. 115 Private method to start the debugger client process.
115 116
116 @param program name of the executable to start (string) 117 @param program name of the executable to start
117 @param arguments arguments to be passed to the program (list of string) 118 @type str
119 @param arguments arguments to be passed to the program
120 @type list of str
118 @param environment dictionary of environment settings to pass 121 @param environment dictionary of environment settings to pass
119 (dict of string) 122 @type dict of str
120 @return the process object (QProcess) or None 123 @param workingDir directory to start the debugger client in
124 @type str
125 @return the process object
126 @rtype QProcess or None
121 """ 127 """
122 proc = QProcess() 128 proc = QProcess()
123 if environment is not None: 129 if environment is not None:
124 env = QProcessEnvironment() 130 env = QProcessEnvironment()
125 for key, value in list(environment.items()): 131 for key, value in list(environment.items()):
126 env.insert(key, value) 132 env.insert(key, value)
127 proc.setProcessEnvironment(env) 133 proc.setProcessEnvironment(env)
128 args = arguments[:] 134 args = arguments[:]
135 if workingDir:
136 proc.setWorkingDirectory(workingDir)
129 proc.start(program, args) 137 proc.start(program, args)
130 if not proc.waitForStarted(10000): 138 if not proc.waitForStarted(10000):
131 proc = None 139 proc = None
132 140
133 return proc 141 return proc
134 142
135 def startRemote(self, port, runInConsole, venvName, originalPathString): 143 def startRemote(self, port, runInConsole, venvName, originalPathString,
144 workingDir=None):
136 """ 145 """
137 Public method to start a remote Python interpreter. 146 Public method to start a remote Python interpreter.
138 147
139 @param port port number the debug server is listening on 148 @param port port number the debug server is listening on
140 @type int 149 @type int
142 console window 151 console window
143 @type bool 152 @type bool
144 @param venvName name of the virtual environment to be used 153 @param venvName name of the virtual environment to be used
145 @type str 154 @type str
146 @param originalPathString original PATH environment variable 155 @param originalPathString original PATH environment variable
156 @type str
157 @param workingDir directory to start the debugger client in
147 @type str 158 @type str
148 @return client process object, a flag to indicate a network connection 159 @return client process object, a flag to indicate a network connection
149 and the name of the interpreter in case of a local execution 160 and the name of the interpreter in case of a local execution
150 @rtype tuple of (QProcess, bool, str) 161 @rtype tuple of (QProcess, bool, str)
151 """ 162 """
208 if rexec: 219 if rexec:
209 args = Utilities.parseOptionString(rexec) + \ 220 args = Utilities.parseOptionString(rexec) + \
210 [rhost, interpreter, debugClient, 221 [rhost, interpreter, debugClient,
211 noencoding, str(port), redirect, ipaddr] 222 noencoding, str(port), redirect, ipaddr]
212 args[0] = Utilities.getExecutablePath(args[0]) 223 args[0] = Utilities.getExecutablePath(args[0])
213 process = self.__startProcess(args[0], args[1:]) 224 process = self.__startProcess(args[0], args[1:],
225 workingDir=workingDir)
214 if process is None: 226 if process is None:
215 E5MessageBox.critical( 227 E5MessageBox.critical(
216 None, 228 None,
217 self.tr("Start Debugger"), 229 self.tr("Start Debugger"),
218 self.tr( 230 self.tr(
263 if ccmd: 275 if ccmd:
264 args = Utilities.parseOptionString(ccmd) + \ 276 args = Utilities.parseOptionString(ccmd) + \
265 [interpreter, os.path.abspath(debugClient), 277 [interpreter, os.path.abspath(debugClient),
266 noencoding, str(port), '0', ipaddr] 278 noencoding, str(port), '0', ipaddr]
267 args[0] = Utilities.getExecutablePath(args[0]) 279 args[0] = Utilities.getExecutablePath(args[0])
268 process = self.__startProcess(args[0], args[1:], clientEnv) 280 process = self.__startProcess(args[0], args[1:], clientEnv,
281 workingDir=workingDir)
269 if process is None: 282 if process is None:
270 E5MessageBox.critical( 283 E5MessageBox.critical(
271 None, 284 None,
272 self.tr("Start Debugger"), 285 self.tr("Start Debugger"),
273 self.tr( 286 self.tr(
276 return process, self.__isNetworked, interpreter 289 return process, self.__isNetworked, interpreter
277 290
278 process = self.__startProcess( 291 process = self.__startProcess(
279 interpreter, 292 interpreter,
280 [debugClient, noencoding, str(port), redirect, ipaddr], 293 [debugClient, noencoding, str(port), redirect, ipaddr],
281 clientEnv) 294 clientEnv,
295 workingDir=workingDir)
282 if process is None: 296 if process is None:
283 self.__startedVenv = "" 297 self.__startedVenv = ""
284 E5MessageBox.critical( 298 E5MessageBox.critical(
285 None, 299 None,
286 self.tr("Start Debugger"), 300 self.tr("Start Debugger"),
290 self.__startedVenv = venvName 304 self.__startedVenv = venvName
291 305
292 return process, self.__isNetworked, interpreter 306 return process, self.__isNetworked, interpreter
293 307
294 def startRemoteForProject(self, port, runInConsole, venvName, 308 def startRemoteForProject(self, port, runInConsole, venvName,
295 originalPathString): 309 originalPathString, workingDir=None):
296 """ 310 """
297 Public method to start a remote Python interpreter for a project. 311 Public method to start a remote Python interpreter for a project.
298 312
299 @param port port number the debug server is listening on 313 @param port port number the debug server is listening on
300 @type int 314 @type int
302 console window 316 console window
303 @type bool 317 @type bool
304 @param venvName name of the virtual environment to be used 318 @param venvName name of the virtual environment to be used
305 @type str 319 @type str
306 @param originalPathString original PATH environment variable 320 @param originalPathString original PATH environment variable
321 @type str
322 @param workingDir directory to start the debugger client in
307 @type str 323 @type str
308 @return client process object, a flag to indicate a network connection 324 @return client process object, a flag to indicate a network connection
309 and the name of the interpreter in case of a local execution 325 and the name of the interpreter in case of a local execution
310 @rtype tuple of (QProcess, bool, str) 326 @rtype tuple of (QProcess, bool, str)
311 """ 327 """
354 if rexec: 370 if rexec:
355 args = Utilities.parseOptionString(rexec) + \ 371 args = Utilities.parseOptionString(rexec) + \
356 [rhost, interpreter, os.path.abspath(debugClient), 372 [rhost, interpreter, os.path.abspath(debugClient),
357 noencoding, str(port), redirect, ipaddr] 373 noencoding, str(port), redirect, ipaddr]
358 args[0] = Utilities.getExecutablePath(args[0]) 374 args[0] = Utilities.getExecutablePath(args[0])
359 process = self.__startProcess(args[0], args[1:]) 375 process = self.__startProcess(args[0], args[1:],
376 workingDir=workingDir)
360 if process is None: 377 if process is None:
361 E5MessageBox.critical( 378 E5MessageBox.critical(
362 None, 379 None,
363 self.tr("Start Debugger"), 380 self.tr("Start Debugger"),
364 self.tr( 381 self.tr(
409 if ccmd: 426 if ccmd:
410 args = Utilities.parseOptionString(ccmd) + \ 427 args = Utilities.parseOptionString(ccmd) + \
411 [interpreter, os.path.abspath(debugClient), 428 [interpreter, os.path.abspath(debugClient),
412 noencoding, str(port), '0', ipaddr] 429 noencoding, str(port), '0', ipaddr]
413 args[0] = Utilities.getExecutablePath(args[0]) 430 args[0] = Utilities.getExecutablePath(args[0])
414 process = self.__startProcess(args[0], args[1:], clientEnv) 431 process = self.__startProcess(args[0], args[1:], clientEnv,
432 workingDir=workingDir)
415 if process is None: 433 if process is None:
416 E5MessageBox.critical( 434 E5MessageBox.critical(
417 None, 435 None,
418 self.tr("Start Debugger"), 436 self.tr("Start Debugger"),
419 self.tr( 437 self.tr(
422 return process, self.__isNetworked, interpreter 440 return process, self.__isNetworked, interpreter
423 441
424 process = self.__startProcess( 442 process = self.__startProcess(
425 interpreter, 443 interpreter,
426 [debugClient, noencoding, str(port), redirect, ipaddr], 444 [debugClient, noencoding, str(port), redirect, ipaddr],
427 clientEnv) 445 clientEnv,
446 workingDir=workingDir)
428 if process is None: 447 if process is None:
429 self.__startedVenv = "" 448 self.__startedVenv = ""
430 E5MessageBox.critical( 449 E5MessageBox.critical(
431 None, 450 None,
432 self.tr("Start Debugger"), 451 self.tr("Start Debugger"),

eric ide

mercurial