两个控制台应用程序之间的管道?

Posted

技术标签:

【中文标题】两个控制台应用程序之间的管道?【英文标题】:Pipe between two console applications? 【发布时间】:2012-03-31 22:46:26 【问题描述】:

如何在不同控制台窗口中运行的两个单独的控制台应用程序之间进行管道传输?

例如我想做类似的事情:

ffmpeg -i 0.flv -vcodec mpeg4 -f asf -s cif - | vlc -

但是,我想从两个单独的窗口执行此操作,这不起作用,我想这是因为标准输出是 cmd 窗口的本地输出。

cmd窗口1:

ffmpeg -i 0.flv -vcodec mpeg4 -f asf -s cif -

cmd窗口2:

vlc -

有没有办法以编程方式实现这一点? | 在幕后究竟做了什么?

【问题讨论】:

如果您确切地告诉我们您想通过此实现什么目标,建议解决方案可能会更容易。 很明显他正试图将 ffmpeg 输出定向到 VLC 的输入我认为? :) 是的,但问题是如何在 2 个单独的窗口中执行此操作。为什么在 2 个窗口中?如果他想关注两个程序的状态报告(通过 STDERR),可能还有其他解决方案(见我的回答)。 【参考方案1】:

cmd 所做的是将第一个进程的标准输出连接到第二个进程的标准输入,您可以通过编程方式完成此操作。有关示例,请参见以下 SO 帖子:

How does one setup a pipe between two child processes in Win32?

如果您想查看两个程序 (STDERR) 的状态输出,可以将其重定向到另一个文件或以编程方式读取。

【讨论】:

【参考方案2】:

没有办法。 |将一个命令的输出通过管道传输到另一个进程的标准输入中。

【讨论】:

【参考方案3】:

尝试编写两个封装进程来调用其他进程并使用命名管道重定向数据。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365590(v=vs.85).aspx

【讨论】:

以上是关于两个控制台应用程序之间的管道?的主要内容,如果未能解决你的问题,请参考以下文章

在两个程序之间用c创建一个管道

如何使用管道在两个程序之间发送一个简单的字符串?

使用内存映射文件在盒子上的两个进程之间交换文本

C# 和 Python 之间的命名管道

两个进程之间使用的命名管道有啥问题?

Fortran 和 C# 之间的管道