Rohrleitungen stdout und stderr innerhalb einer Makefile-Regel
Möchte ich pipe die Ausgabe eines Skripts zu einem anderen Programm. Etwas, was ich normalerweise tun würde, mit diesen beiden Formen:
python test.py 2>&1 | pyrg
python test.py |& pyrg
Mein problem ist, dass es nicht funktioniert, die aus einem makefile:
[Makefile]
test:
python test.py 2>&1 | pyrg [doesn't work]
Möchte ich vermeiden, schreiben Sie eine Skriptdatei, die die Arbeit macht.
Edit:
Dies scheint wie eine pyrg
Problem:
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
Dies ist eine schlechte Lösung für mich, da ich nie an die cat
Teil im Falle eines test-Fehler (alles ist in einem Makefile-Regel)
- Sollte dies funktionieren.
make
übergibt die gesamte Zeile zu/bin/sh
für interpretation, also alles, was diese Schale (die nicht brauchen, um Ihre Benutzer-shell) kann verstehen funktioniert. - Wie genau hat es nicht funktioniert? Versuchen Sie
export SHELL := /bin/bash
irgendwo in deinem makefile. - Der zweite Befehl ausgeführt, als ob es didn ' T erhalten die Eingabe von
stdin
. Und eigentlich läuft vor dem ersten. Mit||
statt|
unterhält die Reihenfolge aber noch einmalpyrg
erhalten nicht die Eingabe. - diese Einstellung half, zu vermeiden, ein Fehler bei der Verwendung von
|&
. Aber das Verhalten immer noch so wie in meinem vorherigen Kommentar. - Sollte es nicht egal in welcher Reihenfolge die Programme gestartet werden. Die zwei werden verbunden, indem das Rohr auch so.
- was ich meine ist, dass das zweite Programm schreibt seine Ausgabe als ob es hatte nichts
stdin
(fürpyrg
den Hilfe-text). So es scheint, Sie sind nicht miteinander verbunden durch das Rohr. Nur dann sehe ich das erste Programm die Ausgabe auf dem Bildschirm (sollten, wurden umgeleitet, um die zweite) - Äh, ja, das ist ganz kaputt dann!!!
|&
ist csh-syntax, würde ich nicht erwarten, dass die Arbeit in einem makefile. Sind Sie sicher, dass es kein Tippfehler ist, wie wenn manpython test.py 2&>1 | pyrg
? gibt es nun eine Datei1
im Arbeitsverzeichnis?- Versuchen Sie es ohne die 2&>1. Es tut pipe stdout?
- es funktioniert.
- kein Tippfehler und kein
1
- Datei (es sei denn, ich habe absichtlich machen, die Tippfehler 🙂 ) - Wenn Sie gut mit einem bashism, wie etwa
pyrg <(python test.py 2>&1)
? - hat die richtige Antwort
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stolperte ich über diese Frage mit dem gleichen problem und war nicht zufrieden mit der Antwort. Ich hatte eine binäre
TLBN
fehlgeschlagenen Testfallexample2.TLBN
.Dies ist, was mein make-Datei sah auf den ersten.
Gescheitert mit der Fehlermeldung, die ich erwarte und die Unterbrechung der make-Prozess.
Dies ist mein Update:
Hinweis: die
-
am Anfang der Zeile, die sagt, machen Sie zu ignorieren, keine Ausgabe auf stderr.Hoffe, dass dies jemand hilft, die ein ähnliches problem.
Es nicht erklären, warum die einfache Ansätze funktionieren nicht, aber es funktioniert der trick: