我想通过打开一个进程并运行plink来打开来自c#的SSH连接.应收集所有输出,并根据结果,程序将触发对ssh的操作.我的大问题是,我正在使用一对,如果不同的脚本,我需要(自动)用户交互.因此,我必须捕获所有输出数据(标准输出,标准错误和CONSOLE).
查看以下测试批次应该使案例更加清晰:
1: @ECHO OFF
2: ECHO StdOut
3: ECHO StdErr 1>&2
4: ECHO Cons>CON
Run Code Online (Sandbox Code Playgroud)
代码如下:
Process process;
Process process;
process = new Process();
process.StartInfo.FileName = @"cmd.exe";
process.StartInfo.Arguments = "/c test.bat";
process.StartInfo.UseShellExecute = false;
process.StartInfo.ErrorDialog = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.Start();
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.ErrorDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.BeginOutputReadLine();
process.BeginErrorReadLine();
StreamWriter inputWriter = process.StandardInput;
[...]
Run Code Online (Sandbox Code Playgroud)
我能够捕获2 + 3行,但不能捕获4行(某些程序使用).我也试过powershell(或直接plink)而不是cmd.exe作为起点,但结果相同.
在c#中是否有任何方法可以捕获控制台,或者您是否知道任何第三方命令行能够将CON重定向到stdout或类似的东西?