【发布时间】:2017-04-03 16:16:28
【问题描述】:
我想 grep 一个日志文件 - 它可能非常大,通常 >= 600mb - 然后尾随输出以获得正好 n 行。
更准确地说,我希望获得与在 Windows/Linux 提示符下键入以下命令相同的输出:
grep.exe -i "STRING" "PATH_TO_FILE" | tail.exe -n LINES_TO_TAIL
我是 C# 和 .Net (Core) 新手,所以请善待我。以下代码是我尝试获得有用的东西:
executableName = @"PATH_TO\grep.exe";
executableArgs = String.Format(@"-i {0} {1} | PATH_TO\\tail.exe -n {2}", paramList["Text"], moduleInfo.GetValue("LogPath"), paramList["MaxLines"]);
var processStartInfo = new ProcessStartInfo
{
FileName = executableName,
Arguments = executableArgs,
RedirectStandardOutput = true
};
Process process = Process.Start(processStartInfo);
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
我很确定问题可能在于在原始参数列表中使用| 不是处理两个进程之间的管道的正确方法。
如果我将UseShellExecute 设置为true,我会收到一条异常消息,如"UseShellExecute" must always be false。
即使不使用外部可执行文件,是否有合理有效的方法来获得我的期望?
【问题讨论】:
-
问题是
executableArgs将作为参数传递,这不像在控制台中编写。您需要为tail创建另一个进程,并将输入作为grep进程的输出提供给它。 -
我找到了this。我认为这正是您想要的。
标签: c# asp.net-core .net-core