感谢@user2526830的代码。基于这些代码,我在程序中添加了几行代码,因为我想读取ssh命令的输出。下面是我的代码,它在第行给出了一个错误 while
standardout尚未重定向或进程尚未启动。
我想要实现的是将ls的输出读入一个字符串。
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.FileName = @"f:\plink.exe";
startinfo.Arguments = "-ssh abc@x.x.x.x -pw abc123";
Process process = new Process();
process.StartInfo = startinfo;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.Start();
process.StandardInput.WriteLine("ls -ltr /opt/*.tmp");
process.StandardInput.WriteLine("exit");
process.StartInfo.RedirectStandardOutput = true;
while (!process.StandardOutput.EndOfStream)
{
string line = process.StandardOutput.ReadLine();
}
process.WaitForExit();
Console.ReadKey();
2条答案
按热度按时间sirbozc51#
在启动进程之前,请尝试设置标准输出重定向。
mpgws1up2#
当您尝试读取输出时,进程可能已经终止(由于您的“exit”命令)。尝试下面稍微修改的版本,我将while循环移到“ls”命令之后,但移到“exit”命令之前。
它应该可以很好地读取“ls”命令的输出,但不幸的是,它很可能会挂起,因为您永远不会在standardoutput上获得endofstream。当没有更多的内容可读取时,readline将被阻塞,直到它可以读取另一行。
因此,除非您知道如何检测由命令生成的输出的最后一行,并在读取后中断循环,否则您可能需要使用单独的线程进行读取或写入。