我如何在 .NET 中管道 stdout/stderr?

Posted

技术标签:

【中文标题】我如何在 .NET 中管道 stdout/stderr?【英文标题】:How do i pipe stdout/stderr in .NET? 【发布时间】:2010-03-23 17:01:09 【问题描述】:

我想做这样的事情

ffmpeg -i audio.mp3 -f flac - | oggenc2.exe - -o audio.ogg

我知道如何使用 .NET 中的进程类来执行 ffmpeg -i audio.mp3 -f flac,但我如何将其通过管道传输到 oggenc2?

如何做到这一点的任何示例(不需要是 ffmpeg 或 oggenc2)都可以。

【问题讨论】:

您是从 .NET 应用程序中调用进程,还是尝试为您自己的控制台应用程序复制该参数格式? 复制该论点是什么意思?你的意思是接受像 ffmpeg/oggenc2 这样的争论吗?不,我想在我的 .NET 应用程序中调用这些 【参考方案1】:

好的,我为此编写了以下代码:

    Process ffmpeg = new Process
    
        StartInfo = new ProcessStartInfo
        
            FileName = "ffmpeg.exe",
            Arguments = "-i audio.mp3 -f flac -",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            WindowStyle = ProcessWindowStyle.Hidden
        
    ;
    Process oggenc2 = new Process
    
        StartInfo = new ProcessStartInfo
        
            FileName = "oggenc2.exe",
            Arguments = "- -o audio.ogg",
            UseShellExecute = false,
            RedirectStandardInput = true,
            WindowStyle = ProcessWindowStyle.Hidden
        
    ;

    ffmpeg.Start();
    oggenc2.Start();

    int bufferLength = 4096;
    var input = oggenc2.StandardInput.BaseStream;
    var output = ffmpeg.StandardOutput.BaseStream;

    using (BinaryWriter writer = new BinaryWriter(input))
    
        using (BinaryReader r = new BinaryReader(output))
        
            byte[] buffer = new byte[bufferLength];
            int bytesRead;
            do
            
                bytesRead = r.Read(buffer, 0, bufferLength);
                writer.Write(buffer, 0, bytesRead);
             while (bytesRead > 0);
        
    

    ffmpeg.WaitForExit();

希望,这会有所帮助。

【讨论】:

以上是关于我如何在 .NET 中管道 stdout/stderr?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Web API - 如何在中间件管道中隐藏 DbContext 事务?

如何在.Net Core 3.1中异步地将一个对象序列化为JSON并写入管道?

如何让 mvc 管道在 .net core 5 中对 oidc 进行身份验证

ASP.NET Core管道深度剖析:管道是如何建立起来的?

如何修复 HTTP 错误 500.22 - 内部服务器错误检测到 ASP.NET 设置不适用于集成托管管道模式

ASP.NET Core管道深度剖析:管道是如何建立起来的?