按需读取.NET Process的StandardOutput

时间:2017-07-06 08:55:27

标签: c# .net multithreading outputstream

我正在研究一种机制,它能够创建一个运行脚本的进程。在某些时候,我通过StandardInput.WriteLine()将输入发送到该脚本,这会导致它显示信息。我想只检索输入之间显示的输出部分。

例如。

"一些文字"

用户名:< - 我们通过StandardInput发送输入,并使脚本写入一些数据

"这是我想要回收的输出部分"

密码:< - 我们通过StandardInput发送另一个输入,我不想检索它。

"更多文字"

我尝试使用OutputDataReceived事件,但它没有按预期触发(我认为当我将输入传递给脚本时会触发它,导致它吐出数据)。

你们能帮我解决一下吗?

这是之前使用OutputDataReceived方法的尝试。

public ctor()
{
    this.outputStringsList = new List<string>();
    this.process = new Process();
    this.process.StartInfo = this.GetProcessStartInfo();
    this.process.OutputDataReceived += onOutputDataReveived;
    this.process.Start();
    this.process.BeginOutputReadLine();
}

private void onOutputDataReveived(object sender, DataReceivedEventArgs e)
{
    var data = e.Data;
    this.outputStringsList.Add(data);
}

private ProcessStartInfo GetProcessStartInfo()
{
    var start = new ProcessStartInfo();
    start.UseShellExecute = false;
    start.CreateNoWindow = true;
    start.RedirectStandardInput = true;
    start.RedirectStandardOutput = true;

    return start;
}

public void PassArg(string arg)
{
    this.process.StandardInput.WriteLine(arg);
}

它确实返回了流程的输出,但它没有按需

0 个答案:

没有答案