21

我想将脚本的输出通过管道传输到不同的程序。我通常会使用这两种形式做的事情:

 python test.py 2>&1 | pyrg
 python test.py |& pyrg

我的问题是它在makefile中不起作用:

[Makefile]
test:
    python test.py 2>&1 | pyrg [doesn't work]

我希望避免编写完成工作的脚本文件。

编辑:

这似乎是一个pyrg问题:

python test.py 2>&1 | tee test.out // Writes to the file both stderr and stdout
cat test.out | pyrg                // Works fine!
python test.py 2>&1 | pyrg         // pyrg behaves as if it got no input

这对我来说是一个糟糕的解决方案,因为在测试失败的情况下我永远不会进入该cat部分(一切都在 Makefile 规则内)

4

3 回答 3

8

我偶然发现了同样的问题,并且对答案不满意。TLBN我有一个在测试用例上失败的二进制文件example2.TLBN

这是我的 make 文件首先查看的内容。

make:
     ./TLBN example2.TLBN > ex2_output.txt

失败并出现我期望的错误消息并停止制作过程。

这是我的修复:

make:
    -./TLBN example2.TLBN > ex2_output.txt 2>&1

注意该-行的开头,它告诉 make 忽略任何到 stderr 的输出。

希望这可以帮助有类似问题的人。

于 2013-10-24T05:16:15.373 回答
4

它没有解释为什么直截了当的方法不起作用,但它确实有效:

[Makefile]
test: 
    python test.py >test.out 2>&1; pyrg <test.out
于 2012-08-02T06:57:01.117 回答
0

奇怪的是,我遇到了同样的问题,并像这样解决了它:

check-errors:
    check-for-errors.sh &> errors.txt

我不太确定为什么2>&1 >errors.txt不在这里工作,但&>确实

于 2020-03-24T14:35:38.400 回答