如何检测标准输出是不是连接到 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 (连接到管道)是不是会阻塞