Files
codeql/csharp/extractor/Semmle.Util/ProcessStartInfoExtensions.cs

40 lines
1.1 KiB
C#

using System.Collections.Generic;
using System.Diagnostics;
namespace Semmle.Util
{
public static class ProcessStartInfoExtensions
{
/// <summary>
/// Runs this process, and returns the exit code, as well as the contents
/// of stdout in <paramref name="stdout"/>.
/// </summary>
public static int ReadOutput(this ProcessStartInfo pi, out IList<string> stdout)
{
stdout = new List<string>();
using var process = Process.Start(pi);
if (process is null)
{
return -1;
}
if (pi.RedirectStandardOutput && !pi.UseShellExecute)
{
string? s;
do
{
s = process.StandardOutput.ReadLine();
if (s is not null)
{
stdout.Add(s);
}
}
while (s is not null);
}
process.WaitForExit();
return process.ExitCode;
}
}
}