【问题标题】:Tell if STDOUT of Perl Script is redirected判断 Perl 脚本的 STDOUT 是否被重定向
【发布时间】:2012-05-06 20:39:05
【问题描述】:

所以我写了一个简单的 html 1.0 服务器,我在服务器上有一些 perl 脚本。特别是,我有这个称为直方图的脚本,它是一个 html 表单,其表单操作等于另一个 cgi 文件。代码如下:

print "<form action=\"tallyandprint.cgi\" method=\"GET\">";

现在,当我调用 tallyandprint.cgi 时,它会使用 gnuplot 绘制一个图形并将其发送到用户的浏览器(STDOUT 在 html 服务器代码中重定向,因此 perl 继承了它)。现在,我还希望能够从 bash 运行 tallyandprint.cgi,但采用不同风格的参数。现在,我使用 perl 解析通过解析 url 来获取模式,并将 + 符号之间的内容分开(例如:?pattern=1+2+3+4 是 url 是什么)。

这很好,花花公子,但我不希望我的论点在 bash 中写成 1+2+3+4,而是以不同的方式分隔。我尝试使用 perl 的 isatty() 版本,但由于输入始终来自终端(因为服务器执行它),因此我无法区分输入是来自 bash 还是来自 Web 浏览器。

我的下一个想法是找出 STDOUT 是否被重定向。因为如果网络服务器运行 cgi,STDOUT 将被重定向到用户连接的套接字。如果在 bash 中运行,STDOUT 应该是正常的 tty。我如何在 perl 中检查这个?

【问题讨论】:

标签: perl stdout tty io-redirection


【解决方案1】:
if (-t STDOUT) {
    say "STDOUT is probably not redirected";
}
else {
    say "STDOUT is probably redirected";
}

【讨论】:

猜你喜欢
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
相关资源
最近更新 更多