我正在使用Process
類來啓動某個進程,它正在計算一些數據給它的控制檯輸出,我需要讀取進程控制檯的最後一行。應該怎麼做?這是process.BeginOutputReadLine();
,但我不知道如何使用只讀LAST行。如何讀取輸出流程類的最後一行?
1
A
回答
3
string lastLine = null;
while (!process.StandardOutput.EndOfStream)
{
lastLine = process.StandardOutput.ReadLine();
}
//do what you want here with lastLine;
1
這是應該做的代碼,你需要的東西:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{
class Program
{
public static Process ShellStart(string aCmd, TextWriter aOutputWriter = null, TextWriter aErrorWriter = null)
{
var vProcess = new Process();
var vStartInfo = vProcess.StartInfo;
vStartInfo.FileName = Path.Combine(Environment.SystemDirectory, "CMD.EXE") ;
var vCmd = "/Q /C ";
vStartInfo.Arguments = vCmd + "\"" + aCmd + "\"";
vStartInfo.UseShellExecute = false;
vStartInfo.CreateNoWindow = true;
if (aOutputWriter != null)
{
vProcess.OutputDataReceived += (p, a) =>
{
if (a.Data != null)
{
aOutputWriter.WriteLine(a.Data);
}
};
vStartInfo.RedirectStandardOutput = true;
vStartInfo.RedirectStandardInput = true;
}
if (aErrorWriter != null)
{
vProcess.ErrorDataReceived += (p, a) =>
{
if (a.Data != null)
{
aErrorWriter.WriteLine(a.Data);
}
};
vStartInfo.RedirectStandardError = true;
vStartInfo.RedirectStandardInput = true;
}
if (!vProcess.Start()) return null;
if (aOutputWriter != null || aErrorWriter != null)
vProcess.Exited += (s, e) =>
{
if (aOutputWriter != null) aOutputWriter.Flush();
if (aErrorWriter != null) aErrorWriter.Flush();
};
if (aOutputWriter != null) vProcess.BeginOutputReadLine();
if (aErrorWriter != null) vProcess.BeginErrorReadLine();
if (vStartInfo.RedirectStandardInput) vProcess.StandardInput.Close();
return vProcess;
}
public static int ShellExec(string aCmd, TextWriter aOutputWriter = null, TextWriter aErrorWriter = null)
{
var vResult = -1;
using (var vProcess = ShellStart(aCmd, aOutputWriter, aErrorWriter))
if (vProcess != null)
{
vProcess.WaitForExit();
vResult = vProcess.ExitCode;
vProcess.Close();
}
return vResult;
}
public static IEnumerable<String> SplitLines(string s)
{
string vLine;
if (!String.IsNullOrEmpty(s))
using (var vReader = new StringReader(s))
while ((vLine = vReader.ReadLine()) != null)
{
yield return vLine;
}
}
public static string ShellExecGetLastLine(string aCmd)
{
var vOutput = new StringBuilder();
using (TextWriter vWriter = new StringWriter(vOutput))
{
ShellExec(aCmd, vWriter, null);
return SplitLines(Convert.ToString(vOutput).Trim()).LastOrDefault();
}
}
static void Main(string[] args)
{
Console.WriteLine(ShellExecGetLastLine("attrib"));
}
}
}
您可以使用ShellExecGetLastLine(command)
其中command
是路徑到您的可執行文件(與參數一起,如果需要的話),以獲得最後輸出的一行。
在上面的例子中,它調用attrib
輸出在當前目錄下的所有文件的屬性,並返回輸出
相關問題
- 1. 如何獲取子進程stderr流輸出的最後N行?
- 2. 無緩衝的子流程輸出(最後一行缺失)
- 3. 讀取bash命令輸出的最後一行
- 4. Java/Android - 從輸入流讀取後寫入輸出流
- 5. 如何定期保存程序輸出的最後一行?
- 6. 運行批處理文件並在暫停後讀取最後一行輸出
- 7. PHP - ssh2讀取輸出流
- 8. 流>>最後一行讀兩次
- 9. 如何從wget命令輸出中提取最後一行?
- 10. 在張量流中獲取dynamic_rnn的最後一個輸出嗎?
- 11. 文件中的最後讀取行輸出爲空
- 12. 如何使用Estimator類輸出張量流中的最後一層?
- 13. 從另一個進程的輸出流中讀取
- 14. execve和管道問題 - 如何讀取最後輸出?
- 15. Prinitng輸出最後一行輸入Java
- 16. 等待子流程的最後一行
- 17. 如何閱讀Scanner.nextLine()的最後一行?
- 18. 如何讀取DocumenListener中的最後一個字或最後一行
- 19. 如何讀取python中最後幾行?
- 20. 讀取文件的最後一行
- 21. 閱讀標準輸出的最後一行
- 22. 如何逐行讀取標準輸出?
- 23. Python:subprocess.popen:讀取輸出的每一行
- 24. 讀取netstat輸出的第一行?
- 25. 如何讀取1GB的文件的最後一行 - java的
- 26. 如何從過程輸出讀取
- 27. 如何再次讀取最後一次輸入到Scanner實例?
- 28. 我如何提取每個輸出的最後一個值?
- 29. 在Bash中,如何在讀取-es後輸出新行?
- 30. 如何高效地讀取文本文件的最後一行
只能輸出或兩個輸出和錯誤的最後一行? – dotctor
只輸出,會嘗試你的答案,看起來像這樣 –