unix[와 유사한] 프로그램은 출력이 어디로 가는지 결정할 수 있습니까?

unix[와 유사한] 프로그램은 출력이 어디로 가는지 결정할 수 있습니까?

최근까지 나는 Unix-y 프로그램이 출력이 표준 출력으로 가는지, 파일로 리디렉션되는지, 파이프로 가는지 인식하지 못한다는 인상을 받았습니다. 그러나 이 사이트의 관련 없는 U&L 질문이 다음 예에 관심을 끌었습니다.

% echo "hello world" > file

% grep --color=auto lo file
hello world

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

분명히 여기에서는 볼 수 없지만 첫 번째 명령에는 예상대로 'lo'가 강조 표시되어 있습니다. 그러나 파이프를 통과하는 두 번째 호출에서는 색상이 표시되지 않습니다. 이는 grep출력이 파이프로 향하는 것을 인식하고 색상 출력을 피했음을 나타냅니다. 이것은 어떻게 이루어 집니까?

답변1

파일 설명자가 tty를 참조하는지 여부를 확인할 수 있습니다.

확인해 보세요함수isatty.

또는 다음을 사용할 수 있습니다.함수fstat파일에 대한 정보 덩어리를 제공합니다.

답변2

그렇습니다. 출력이 어디로 가는지 결정하는 방법에는 여러 가지가 있습니다. 에 대한비교 stackoverflow의 관련 질문에 대한 내 답변을 참조하세요..

답변3

용이하게. 출력이 어디로 갈지 결정하기 위해 다양한 방법을 사용할 수 있습니다. 그래서 파이썬에서는 다음과 같은 일을 할 수 있습니다

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

관련 정보