From b0f11fc80103deb0a96dddeb15a787a7e2af2e96 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 25 Mar 2019 15:26:17 -0700 Subject: [PATCH] silence scraper stderr --- .../Ast/Impl/Modules/CompiledPythonModule.cs | 3 ++- src/Core/Impl/OS/PlatformProcess.cs | 27 ++++++++++--------- src/Core/Impl/OS/ProcessServices.cs | 6 +++++ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Analysis/Ast/Impl/Modules/CompiledPythonModule.cs b/src/Analysis/Ast/Impl/Modules/CompiledPythonModule.cs index e4fe9c0e5..478054491 100644 --- a/src/Analysis/Ast/Impl/Modules/CompiledPythonModule.cs +++ b/src/Analysis/Ast/Impl/Modules/CompiledPythonModule.cs @@ -85,7 +85,8 @@ private string ScrapeModule() { CreateNoWindow = true, StandardOutputEncoding = Encoding.UTF8, RedirectStandardInput = true, - RedirectStandardOutput = true + RedirectStandardOutput = true, + RedirectStandardError = true }; var ps = Services.GetService(); diff --git a/src/Core/Impl/OS/PlatformProcess.cs b/src/Core/Impl/OS/PlatformProcess.cs index 09463819b..ef8e38ce5 100644 --- a/src/Core/Impl/OS/PlatformProcess.cs +++ b/src/Core/Impl/OS/PlatformProcess.cs @@ -19,29 +19,30 @@ namespace Microsoft.Python.Core.OS { public sealed class PlatformProcess : IProcess { - private readonly Process _process; + public Process Process { get; private set; } + private readonly IProcessServices _ps; public PlatformProcess(IProcessServices ps, Process process) { _ps = ps; - _process = process; + Process = process; } - public int Id => _process.Id; - public StreamWriter StandardInput => _process.StandardInput; - public StreamReader StandardOutput => _process.StandardOutput; - public StreamReader StandardError => _process.StandardError; - public bool HasExited => _process.HasExited; - public int ExitCode => _process.ExitCode; + public int Id => Process.Id; + public StreamWriter StandardInput => Process.StandardInput; + public StreamReader StandardOutput => Process.StandardOutput; + public StreamReader StandardError => Process.StandardError; + public bool HasExited => Process.HasExited; + public int ExitCode => Process.ExitCode; public event EventHandler Exited { add { - _process.EnableRaisingEvents = true; - _process.Exited += value; + Process.EnableRaisingEvents = true; + Process.Exited += value; } - remove => _process.Exited -= value; + remove => Process.Exited -= value; } - public bool WaitForExit(int milliseconds) => _process.WaitForExit(milliseconds); - public void Dispose() => _process.Dispose(); + public bool WaitForExit(int milliseconds) => Process.WaitForExit(milliseconds); + public void Dispose() => Process.Dispose(); } } diff --git a/src/Core/Impl/OS/ProcessServices.cs b/src/Core/Impl/OS/ProcessServices.cs index 033dbfc50..768bbcbf8 100644 --- a/src/Core/Impl/OS/ProcessServices.cs +++ b/src/Core/Impl/OS/ProcessServices.cs @@ -40,6 +40,12 @@ public IProcess Start(string path) { public async Task ExecuteAndCaptureOutputAsync(ProcessStartInfo startInfo, CancellationToken cancellationToken = default) { var output = string.Empty; var process = Start(startInfo); + + if (startInfo.RedirectStandardError && process is PlatformProcess p) { + p.Process.ErrorDataReceived += new DataReceivedEventHandler((s, e) => { }); + p.Process.BeginErrorReadLine(); + } + try { output = await process.StandardOutput.ReadToEndAsync(); await process.WaitForExitAsync(30000, cancellationToken);