当我在没有参数的情况下从终端执行"python"时,它会显示Python交互式shell.

当我从终端执行"cat | python"时,它不会启动交互模式.不知何故,在没有任何输入的情况下,它检测到它连接到了一个管道.

如何在C或C++或QT中进行类似的检测?

推荐答案

使用isatty:

#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");

(在Windows上,它们带有下划线前缀:_isatty,_fileno)

C++相关问答推荐

C中的外部/全局变量

如何获得 C 函数的基本编译二进制代码?

关于函数中返回局部指针变量的问题

在 Macbook M1 上为 Tensorflow 安装 C API

libcurl 放置数据流而不是文件

HAL_UART_Transmit_IT 如何在 STM32F091VB 上管理串行发送数据

C中指向结构的指针与指向数组的指针

&> 重定向是如何在 UNIX shell 中实现的?

如何使用带有 typedef 的注册存储类?

| vs < 用于标准输入和标准输出,在 C 中使用拼接、管道和 tee 命令

你怎么能告诉一台计算机它正在添加而不在 Assembly 中添加 addl

我怎样才能在另一个宏中使用一个宏来将宏的定义连接到某个东西? C/C++

为什么`(char)~0`和`(unsigned char)~0`返回不同宽度的值?

使用 strstr 查找子字符串的所有实例会导致奇怪的字符串格式

为什么这个 .c 文件 #include 本身?

复制具有“memcpy”技术上未定义行为的二维数组?

从函数返回结构时可能出现 GCC 错误

这段代码如何在不使用 sizeof() 的情况下确定数组大小?

防止控制台窗口在 Visual Studio C/C++ 控制台应用程序上关闭

在 C 中无法返回数组实际上意味着什么?