【发布时间】: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 中检查这个?
【问题讨论】:
-
更好的解决方案可能是检查是否设置了
$ENV{GATEWAY_INTERFACE}。如果你在 CGI 下运行,它会是,如果你是从 shell 运行,它不应该是。
标签: perl stdout tty io-redirection