スクリプトの出力を別のプログラムにパイプしたい。私が通常これらの2つの形式を使用して行うこと:
python test.py 2>&1 | pyrg
python test.py |& pyrg
私の問題は、メイクファイル内からは機能しないことです。
[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ルール内にあります)
単純なアプローチが機能しない理由は説明されていませんが、トリックはあります。
[Makefile]
test:
python test.py >test.out 2>&1; pyrg <test.out
私は同じ問題でこの質問に出くわし、答えに満足しませんでした。テストケースexample2.TLBN
で失敗したバイナリTLBN
がありました。
これは私のmakeファイルが最初に見たものです。
make:
./TLBN example2.TLBN > ex2_output.txt
これは、私が予期していたエラーメッセージで失敗し、makeプロセスを停止しました。
これは私の修正です:
make:
-./TLBN example2.TLBN > ex2_output.txt 2>&1
Stderrへの出力を無視するようにmakeに指示する行の先頭にある-
に注意してください。
これが同様の問題を抱えている人に役立つことを願っています。
不思議なことに、私は同じ問題を抱えていて、次のように解決しました:
check-errors:
check-for-errors.sh &> errors.txt
なぜ2>&1 >errors.txt
ここでは機能しませんでしたが、&>
した