【问题标题】:Redirecting std output from Process object to file in .net将来自 Process 对象的 std 输出重定向到 .net 中的文件
【发布时间】:2010-10-25 14:33:46
【问题描述】:

是否有一种简单的方法可以在 .NET 中启动进程并将其输出重定向到文件? 我知道在 Win API 中我可以将文件句柄传递给 CreateProcess 函数。 在 .NET 中,我可以做类似的事情

startInfo.RedirectStandardOutput = true;

然后使用BeginOutputReadLineStandardOutput 获取数据并将其保存到文件中。但与操作系统自己处理的相比,这似乎有点开销。

谢谢

【问题讨论】:

    标签: .net file process


    【解决方案1】:

    有点晚了,但这为我指出了一个更好的答案:Capturing binary output from Process.StandardOutput

    Process cmdProcess = new Process();
    ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
    cmdStartInfo.FileName = "samtools";
    
    cmdStartInfo.RedirectStandardError = true;
    cmdStartInfo.RedirectStandardOutput = true;
    cmdStartInfo.RedirectStandardInput = false;
    cmdStartInfo.UseShellExecute = false;
    cmdStartInfo.CreateNoWindow = true;
    
    cmdStartInfo.Arguments = "view -u " + BamFileName + " " + chromosome + ":" + start + "-" + end;
    
    cmdProcess.EnableRaisingEvents = true;
    cmdProcess.StartInfo = cmdStartInfo;
    cmdProcess.Start();
    
    using (FileStream str = new FileStream(outputFilePath, FileMode.Create))
    {
        cmdProcess.StandardOutput.BaseStream.CopyTo(str);
    }
    

    如果您想异步执行此操作,您可以改用 CopyToAsync 并等待返回的任务或添加 ContinueWith 来完成。这对我很有用。

    【讨论】:

    • 您的示例使用的是 samtools(我今天整天都在使用的东西 =])这一事实的加分点
    【解决方案2】:

    您可以将文件运行为someApp.exe >logfile.txt

    【讨论】:

    • 恐怕我无法从 .NET 运行它。我可以运行类似“cmd.exe /c someApp.exe > file.txt”的东西,但这仍然是一种解决方法。
    • @Elephantik 是的,它可能是必需的。您想要的基本上是解决方法。
    • 我不同意操作系统支持的功能是解决方法;)
    • @Elephantik 我不明白你。这个方法很有效。
    • 我需要从 .NET 环境中运行它。不是来自 cmd.exe
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2011-10-27
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多