유닉스 계열 프로그램이 출력 위치를 결정할 수 있습니까? [복사]

유닉스 계열 프로그램이 출력 위치를 결정할 수 있습니까? [복사]

최근까지 내 생각에 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);

관련 정보