類似 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

容易地。可以使用不同的方法來決定輸出的去向。所以在 python 中你可以做類似的事情

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

相關內容