【问题标题】:stdout to multiple processes - Windows标准输出到多个进程 - Windows
【发布时间】:2014-06-25 22:59:35
【问题描述】:

非常类似于: 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 中做我想做的事情?
也许传递给每个进程的参数是为什么两者都不起作用?
我最好[或卡住]编写程序来执行此操作吗?

【问题讨论】:

  • 在这里看看我的答案...stackoverflow.com/questions/22323835/…
  • 刚才试过了 - 没用。 T_T 我认为该脚本中的“tee”程序与“wtee”具有相同的功能。
  • 如何修改我的 tee 程序以从标准输入读取但将所有内容写入 2 个命名管道,然后使用 -i \pipe\1 运行第二个程序,使用 -i \pipe\2 运行另一个程序?
  • Windows 是否支持命名管道[无需编写程序]?我的印象是它们不是,要么我必须编写自己的“管道作家”/“管道阅读器”。

标签: stdout tee


【解决方案1】:

我还没有测试过这个,但是你应该可以用命名管道做这样的事情。您编写了一个名为 splitter.vbs 的 VBscript,它读取其标准输入并写入两个命名管道,然后启动其他两个进程,告诉它们从管道中读取。

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

【讨论】:

  • 不幸的是,批处理脚本无法从 \\.\pipe* 中读取。 :( 不过,我确实很感激你的努力。
  • 啊哈 - 我不知道你的 proc2 和 proc3 是批处理脚本。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-19
    • 2011-08-29
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多