Bis vor kurzem war ich der Meinung, dass Unix-ähnliche Programme nicht wüssten, wohin ihre Ausgabe ging, sei es an die Standardausgabe, umgeleitet in eine Datei oder in eine Pipe. Eine nicht damit zusammenhängende U&L-Frage auf dieser Site machte mich jedoch auf das folgende Beispiel aufmerksam:
% echo "hello world" > file
% grep --color=auto lo file
hello world
% grep --color=auto lo file | cat
hello world
Offensichtlich kann man es hier nicht sehen, aber der erste Befehl zeigt wie erwartet „lo“ hervorgehoben an. Der zweite Aufruf, der durch eine Pipe geht, zeigt jedoch keine Farbe an. Dies deutet darauf hin, dass man sich grep
bewusst war, dass seine Ausgabe an eine Pipe geleitet wird, und die Ausgabe von Farbe vermieden hat. Wie wird das gemacht?
Antwort1
Es ist möglich festzustellen, ob ein Dateideskriptor auf ein TTY verweist.
Kassedie isatty
Funktion.
Alternativ können Siedie fstat
FunktionDadurch erhalten Sie einen Teil der Informationen zur Datei.
Antwort2
Ja, das sind sie. Es gibt mehrere Methoden, um zu bestimmen, wohin die Ausgabe geht. Für eineVergleich: Siehe meine Antwort auf eine verwandte Frage auf Stackoverflow.
Antwort3
Ganz einfach. Es gibt verschiedene Möglichkeiten, um zu bestimmen, wohin die Ausgabe geht. In Python könnten Sie also so etwas tun wie
/* CODE. Input will be parsed and executed */
int
PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
PyCompilerFlags *flags)
{
if (filename == NULL)
filename = "???";
if (Py_FdIsInteractive(fp, filename)) {
int err = PyRun_InteractiveLoopFlags(fp, filename, flags);