¿Son los programas [similares a Unix] capaces de determinar hacia dónde se dirige su producción?

¿Son los programas [similares a Unix] capaces de determinar hacia dónde se dirige su producción?

Hasta hace poco tenía la impresión de que los programas Unix-y no sabían a dónde iba su salida, ya fuera al estándar, redirigido a un archivo o a una tubería. Sin embargo, una pregunta no relacionada de U&L en este sitio me llamó la atención sobre el siguiente ejemplo:

% echo "hello world" > file

% grep --color=auto lo file
hello world

% grep --color=auto lo file | cat
hello world

Obviamente no puedes verlo aquí, pero el primer comando muestra 'lo' resaltado, como se esperaba. Sin embargo, la segunda llamada, que pasa por un tubo, no muestra color. Esto sugiere que grepera consciente de que su salida se dirigía a una tubería y evitó emitir color. ¿Cómo se hace esto?

Respuesta1

Es posible determinar si un descriptor de archivo hace referencia a un tty.

Verificarla isattyfunción.

Alternativamente, puedes usarla fstatfunciónlo que le proporciona una gran cantidad de información sobre el archivo.

Respuesta2

Sí lo son. Existen varios métodos para determinar hacia dónde se dirige la salida. Paracomparación vea mi respuesta a una pregunta relacionada en stackoverflow.

Respuesta3

Fácilmente. Se pueden utilizar diferentes formas para determinar hacia dónde se dirige la salida. Entonces en Python podrías hacer algo como

    /* 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);

información relacionada