Até recentemente, eu tinha a impressão de que os programas Unix-y não sabiam para onde ia sua saída, seja para padronização, redirecionamento para um arquivo ou para um canal. No entanto, uma pergunta U&L não relacionada neste site chamou minha atenção para o seguinte exemplo:
% echo "hello world" > file
% grep --color=auto lo file
hello world
% grep --color=auto lo file | cat
hello world
Obviamente você não pode ver aqui, mas o primeiro comando mostra 'lo' destacado, como esperado. Porém, a segunda chamada, que passa por um cano, não apresenta cor. Isso sugere que ele grep
estava ciente de que sua saída estava sendo direcionada para um tubo e evitou emitir cor. Como isso é feito?
Responder1
É possível determinar se um descritor de arquivo se refere a um tty.
Confiraa isatty
função.
Alternativamente, você pode usara fstat
funçãoque fornece um conjunto de informações sobre o arquivo.
Responder2
Sim, eles estão. Existem vários métodos para determinar para onde está indo a saída. Paracomparação, veja minha resposta a uma pergunta relacionada no stackoverflow.
Responder3
Facilmente. Diferentes maneiras podem ser usadas para determinar para onde a saída está indo. Então, em python você poderia fazer 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);