Environment data
- VS Code version: 1.37.1
- Extension version (available under the Extensions sidebar): master 39cf9e0
- OS and version: macOS Mojave 10.14.6
Expected behaviour
Python commands should only be displayed once in the "Python" output channel.
Actual behaviour
Some Python commands (for example linting or formatting) are displayed twice.
Steps to reproduce:
- Start debugging the extension
- Open a python file and enable linting or formatting on save
- Set 2 breakpoints:
|
const argsList = args.reduce((accumulator, current, index) => { |
|
this.emit('exec', file, args, options); |
- Save the file
- Notice that
this.emit('exec', file, args, options); is only hit once, but the debugger stops twice onlogger.logProcess().
Cause
We register 2 'exec' listeners to the python process:
- In the
create or createActivatedEnvironment method in PythonExecutionFactory:
|
public async create(options: ExecutionFactoryCreationOptions): Promise<IPythonExecutionService> { |
|
const pythonPath = options.pythonPath ? options.pythonPath : this.configService.getSettings(options.resource).pythonPath; |
|
const processService: IProcessService = await this.processServiceFactory.create(options.resource); |
|
const processLogger = this.serviceContainer.get<IProcessLogger>(IProcessLogger); |
|
processService.on('exec', processLogger.logProcess.bind(processLogger)); |
|
return new PythonExecutionService(this.serviceContainer, processService, pythonPath); |
|
} |
- But also in the call to
await this.processServiceFactory.create:
|
public async create(resource?: Uri): Promise<IProcessService> { |
|
const customEnvVars = await this.envVarsService.getEnvironmentVariables(resource); |
|
const proc: IProcessService = new ProcessService(this.decoder, customEnvVars); |
|
this.disposableRegistry.push(proc); |
|
return proc.on('exec', this.processLogger.logProcess.bind(this.processLogger)); |
|
} |
Environment data
Expected behaviour
Python commands should only be displayed once in the "Python" output channel.
Actual behaviour
Some Python commands (for example linting or formatting) are displayed twice.
Steps to reproduce:
vscode-python/src/client/common/process/logger.ts
Line 19 in 39cf9e0
vscode-python/src/client/common/process/proc.ts
Line 184 in 39cf9e0
this.emit('exec', file, args, options);is only hit once, but the debugger stops twice onlogger.logProcess().Cause
We register 2 'exec' listeners to the python process:
createorcreateActivatedEnvironmentmethod inPythonExecutionFactory:vscode-python/src/client/common/process/pythonExecutionFactory.ts
Lines 31 to 37 in 39cf9e0
await this.processServiceFactory.create:vscode-python/src/client/common/process/processFactory.ts
Lines 21 to 26 in 39cf9e0