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 grep
era 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 isatty
función.
Alternativamente, puedes usarla fstat
funció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);