我需要将输出和错误流从一个 Windows 进程(GNU make.exe 执行 armcc 工具链)重定向到一些用 perl 编写的过滤器。我正在运行的命令是:
Make Release 2>&1 | c:\cygwin\bin\perl ../tools/armfilt.pl
编译过程会抛出一些打印件,这些打印件应该在STDOUT
经过一些修改后放置。但是我遇到了一个问题:make 生成的所有打印实际上都被推迟到 make 过程结束,然后才显示给用户。所以,我的问题是:
- 为什么会发生?我试图将第二个进程(perl.exe)的优先级从“正常”更改为“高于正常”,但它没有帮助......
- 如何克服这个问题?
- 我认为可能的解决方法之一可能是仅将
STDERR
打印件发送到 perl(这是我真正需要的),而不是STDOUT+STDERR
. 但我不知道如何在 Windows 中做到这一点。
微软关于管道操作员使用的解释说:
管道运算符 (|) 获取一个命令的输出(默认为 STDOUT)并将其引导到另一个命令的输入(默认为 STDIN)。
但是没有解释如何更改这个默认的 STDOUT 管道。有可能吗?