判断是否重定向了Perl脚本的STDOUT

时间:2012-05-06 20:39:05

标签: perl stdout tty io-redirection

所以我写了一个简单的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是否被重定向。因为如果web服务器运行cgi,STDOUT将被重定向到用户连接的套接字。如果在bash中运行,STDOUT应该是正常的tty。我怎样才能在perl中检查这个?

1 个答案:

答案 0 :(得分:8)

if (-t STDOUT) {
    say "STDOUT is probably not redirected";
}
else {
    say "STDOUT is probably redirected";
}