如何在perl cgi上使用stdin

时间:2010-08-24 14:59:37

标签: perl cgi

我是perl的新手,我想在我的脚本上使用屏幕输入。这是我的脚本,我希望从键盘输入IOS命令。可以有人告诉我我错在哪里。问题我现在的脚本没有读取我的键盘输入,我不确定是否可以处理我的情况。谢谢!

# ### Show ######################################################### 
               $cmd = <STDIN>;
                chomp ($cmd);
               $show_error = "";
              if ($ssh_switch eq 'yes') {
                   ssh_access();
               }
               print "\n",h2($host . ' - ' . $cmd);
                @output=$cmd;
                print hr(),"\n";
               }
}
#########################################################################

3 个答案:

答案 0 :(得分:5)

CGI旨在接受完整的HTTP请求,然后吐出完整的HTTP响应。

它无法以交互方式工作。

如果要编写需要键盘输入的脚本,请不要使用CGI。

答案 1 :(得分:2)

事实上,CGI确实使用STDIN。它用于传递POST请求的正文。试试这个脚本

#!/usr/bin/perl
print "Content-Type: text/plain\r\n\r\nYou entered: ";
print while <STDIN>;

POST一些数据,例如

$ echo "Just test" | POST http://localhost/yourscript.pl
You entered: Just test

POST是来自LWP CPAN发布的程序)

因此,您可以使用从STDIN读取的命令来指导您的脚本,尽管它非常不安全!

答案 2 :(得分:1)

CGI确实允许通过STDIN输入;试试CGI->new(\*STDIN)

虽然可能不是你想要输入的东西。您能举例说明您的输入是什么样的吗?

啊,它看起来像你想要的那样:

  1. 从命令行运行您的脚本,例如:perl scriptname 'Submit=1&Devices=router1&Devices=router2'然后在STDIN上提供您的cisco命令(并获取html输出,这可能不方便),或者

  2. 在浏览器中运行您的脚本,在这种情况下,您应该将STDIN用法替换为输入标记以输入命令并从该命名参数中获取命令

  3. 再看一遍,我看到你已经有一个输入标签“搜索”,你只是没有使用它。 尝试将<STDIN>替换为$cgi->param('search')并将搜索添加到“确保输入数据”检查。