stdout到多个进程 - Windows

时间:2014-06-25 22:59:35

标签: stdout tee

非常相似: How can I send the stdout of one process to multiple processes using (preferably unnamed) pipes in Unix (or Windows)?

...特别

         proc2 -> stdout
       /
 proc1
       \ 
         proc3 -> stdout

我的'proc1'有一些输出,我想传递给'proc2'和'proc3'。
我不想保存'proc1'的输出并将[作为输入]传递给另外两个进程'proc2'和'proc3'。

有很多关于'tee'的讨论,我找到了'wtee'。
唉,以下不起作用:

proc1 | wtee (proc2 -i - <other arguments>) (proc3 -i - <other arguments>)

注意:' - i - '被传入'proc2'和'proc3',这样每个进程都知道输入来自哪里(stdout)。

我有办法在Windows中尝试做什么吗?
也许传递给每个过程的论据是为什么这两个不起作用?
我最好[还是坚持]写一个程序来做这个?

2 个答案:

答案 0 :(得分:0)

我没有对此进行过测试,但您应该可以使用命名管道执行此类操作。你编写了一个名为splitter.vbs的VBscript,它读取它的stdin并写入两个命名管道,然后启动你的另外两个进程,告诉他们从管道读取。

proc1 | cscript /nologo splitter.vbs

proc2 -i \\.\pipe\p1
proc3 -i \\.\pipe\p2

根据您是否希望程序在新窗口中启动,您可以启动3个命令提示符窗口并在每个窗口中运行一个,或者使用START /B重新使用单个命令提示符窗口

splitter.vbs看起来像这样:

Set fso = CreateObject ("Scripting.FileSystemObject") 
Set p1 = fs.CreateTextFile("\\.\pipe\p1”, True)   
Set p2 = fs.CreateTextFile("\\.\pipe\p2”, True) 

Do While Not WScript.StdIn.AtEndOfStream
   Line  = WScript.StdIn.ReadLine()
   p1.WriteLine(Line)
   p2.WriteLine(Line)
Loop

答案 1 :(得分:0)

我通过使自己的管道阅读器/服务器类似于this解决了这个问题,除了服务器可以输出到它选择的多个客户端。