我正在研究一种机制,它能够创建一个运行脚本的进程。在某些时候,我通过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);
}
它确实返回了流程的输出,但它没有按需