类似 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);

相关内容