如何检测标准输出是不是连接到 Perl 中的 tty?

Posted

技术标签:

【中文标题】如何检测标准输出是不是连接到 Perl 中的 tty?【英文标题】:How do I detect if stdout is connected to a tty in Perl?如何检测标准输出是否连接到 Perl 中的 tty? 【发布时间】:2011-03-31 20:13:03 【问题描述】:

我正在寻找与此 Python 代码等效的 Perl:

from sys import stdout
if stdout.isatty():
    print "yes"
else:
    print "no"

【问题讨论】:

【参考方案1】:

使用-t filetest operator。

print -t STDOUT ? "Yes\n" : "No\n"

请注意,在 Perl 中,STDOUT 可以绑定(本质上是一个过于复杂的重载对象),因此到 STDOUT 的输出可能仍会到达一个 TTY,即使它没有直接连接到一个 TTY。

【讨论】:

IO::Interactive 显示了您可能还想考虑的特殊情况。 这个答案到底是怎么得到+5分的,而另一个(较早!)帖子完全的答案是-1分? @Evgeny 这个答案最初是print -t 1 ? "yes\n" : "no\n"。不必要地使用 fileno 会导致投票失败。【参考方案2】:

如果您需要 STDOUT 实际连接到终端,而不仅仅是重定向到 /dev/null/ 或其他什么,请使用 IO::interactive。

【讨论】:

以上是关于如何检测标准输出是不是连接到 Perl 中的 tty?的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 如何检测电源是不是连接到 iDevice 广告正在充电

在 **portable C** 中,如何启动将命令的标准输入连接到启动器的标准输出的命令?

如何测试输出到 std::cout (连接到管道)是不是会阻塞

如何检测系统是不是连接到 ad hoc 或基础设施 wifi?

如何消除 TT 的“打印中的宽字符”警告?

无法通过 perl 中的 socks 代理连接到主机