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

Mag*_*1um 4 perl stdout tty io-redirection

所以我写了一个简单的html 1.0服务器,我在服务器上有一些perl脚本.特别是,我有一个名为直方图的脚本,这是一个带有表单操作的html表单,与另一个cgi文件相同.这是代码:

print "<form action=\"tallyandprint.cgi\" method=\"GET\">";
Run Code Online (Sandbox Code Playgroud)

现在,当我调用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中检查这个?

sal*_*lva 8

if (-t STDOUT) {
    say "STDOUT is probably not redirected";
}
else {
    say "STDOUT is probably redirected";
}
Run Code Online (Sandbox Code Playgroud)

  • 这个成语已被打包为[IO :: Interactive](http://p3rl.org/IO::Inractive).它处理一些未提及的边缘情况,以便我们可以消除答案的不确定性. - 请参阅*[如何判断我是否以交互方式运行?](http://learn.perl.org/faq/perlfaq8.html#How-do-I-find-out-if-Im -running-interactively-or-not - )*在`perlfaq8`中. (6认同)