确定标准输入的性质:终端还是管道
在各种情况下,区分标准输入 (stdin) 是有益的代表一个终端或管道。与提供管道输入时相比,在没有来自终端的参数的情况下调用 Python 时,这种区别在 Python 所表现出的行为差异中变得很明显。为了复制这种检测,包括 C、C 和 Qt 在内的各种编程语言提供了不同的方法。
Unix 方法:isatty
对于 C 和 C ,Unix系统调用 isatty() 提供了一种确定 stdin 性质的方法。该函数采用一个表示正在查询的文件的文件描述符的整数作为其参数。对于 stdin,通常使用表达式 fileno(stdin) 获得。如果文件描述符对应于终端,isatty() 返回非零值,表明 stdin 是终端。相反,零值表示 stdin 不是终端,可能代表管道或文件。
示例:
#include <stdio.h> #include <io.h> ... if (isatty(fileno(stdin))) printf("stdin is a terminal\n"); else printf("stdin is a file or a pipe\n");
Qt 方法:QTextStream
对于 Qt,由于框架的原因,需要不同的方法面向对象的方法。 Qt 使用 QTextStream 与 stdin 交互,可用于确定 stdin 是否源自终端。通过以 stdin 作为参数调用 QTextStream(stdin) 创建 QTextStream 实例。以下代码演示了这种方法:
QTextStream qin(stdin); bool isTerminal = qin.device()->isInteractive();
在这种情况下,如果 stdin 是终端,则 isInteractive 返回 true,如果它是管道或文件,则返回 false。
以上是stdin 是终端还是管道?的详细内容。更多信息请关注PHP中文网其他相关文章!