检测标准输入(stdin)是否被重定向是程序开发中常见的需求,特别是在需要区分交互式输入和管道/文件输入时。以下是几种主流编程语言中检测stdin是否被重定向的方法:
标准输入重定向是指将程序的输入来源从默认的键盘改为文件或其他程序的输出。检测重定向状态可以帮助程序决定是否显示提示信息或采用不同的输入处理策略。
#include <unistd.h>
#include <stdio.h>
int main() {
if (isatty(fileno(stdin))) {
printf("stdin is from terminal (not redirected)\n");
} else {
printf("stdin is redirected (from pipe/file)\n");
}
return 0;
}
import sys
if sys.stdin.isatty():
print("stdin is from terminal (not redirected)")
else:
print("stdin is redirected (from pipe/file)")
import java.io.Console;
public class StdinCheck {
public static void main(String[] args) {
Console console = System.console();
if (console != null) {
System.out.println("stdin is from terminal (not redirected)");
} else {
System.out.println("stdin is redirected (from pipe/file)");
}
}
}
package main
import (
"os"
"log"
)
func main() {
fileInfo, _ := os.Stdin.Stat()
if (fileInfo.Mode() & os.ModeCharDevice) == os.ModeCharDevice {
log.Println("stdin is from terminal (not redirected)")
} else {
log.Println("stdin is redirected (from pipe/file)")
}
}
if [ -t 0 ]; then
echo "stdin is from terminal (not redirected)"
else
echo "stdin is redirected (from pipe/file)"
fi
这些方法可以帮助你可靠地检测stdin是否被重定向,从而编写更健壮的命令行程序。
没有搜到相关的文章