【问题标题】:interface between perl script and HTML with CGIperl 脚本和带有 CGI 的 HTML 之间的接口
【发布时间】:2014-03-07 09:13:17
【问题描述】:

我是 Perl 和 HTML 的新手。我使用发送期望语句、for 循环和子例程在 Perl 中编写了一个后端脚本。在 Perl 脚本中,我登录到服务器并发送一些命令并期待服务器提示并最终退出。现在我正在尝试使用 HTML 将其带到前端。我使用 CGI 作为框架来实现这一点。这是我的部分代码

#!/usr/bin/perl

use Expect;
use Switch;
use warnings;
use 5.008;
use Data::Dumper;
use CGI;

my $q = CGI->new;

my %data;
$data = $q->param('server');
print $q->header;


if($data eq 'null')
{
    print '<p> please select a server</p>';
    exit;

}


### 


    $exp->spawn($command, @parameters)
        or die "Cannot spawn $command: $!\n";

      $exp->send("string\n");


      $exp->expect($timeout, @match_patterns);


      $exp->expect($timeout,
               [ qr/regex1/ => sub { my $exp = shift;
                         $exp->send("response\n");
                         exp_continue; } ],
               [ "regexp2" , \&callback, @cbparms ],
              );


      $exp->soft_close();

这些是我用来登录服务器和发送命令的发送期望命令的示例。但我在浏览器中看到他们将如何登录。但我不希望在浏览器上看到这些,但它们仍应在后台执行

####

print "<html><head><title>Hello World</title></head>\n";
print "<body>\n";
print '<script>checked = false;function checkedAll () {if (checked == false){checked = true}else{checked = false}for (var i = 0; i < document.getElementById("sel").elements.length; i++) {document.getElementById("sel").elements[i].checked = checked;}}</script>';
print '<form action="robostats.pl " method="POST" id="sel">';
print '<input type="checkbox" onClick="checkedAll()">Select All<br />';

foreach my $i (@entire_success) {
    print '<input type="checkbox" name="sel" value="';
    print $i;
    print '">';
    print $i;
    print '<br />';
}

print '<input type="submit" value="submit">';
print '</form>';
print "</body></html>\n";

所以当我尝试在浏览器中运行那些发送期望命令时,服务器登录提示都会出现在浏览器上。我不希望它们出现在浏览器上(它们应该只出现在控制台中),我只想将其输出捕获到一个数组中并在浏览器上显示表单的复选框。请帮助我如何实现这一目标。 谢谢你

【问题讨论】:

  • 你在expect脚本中试过log_user 0吗?它会关闭命令和结果的记录。
  • 顺便说一句,您的脚本中充斥着打印语句,您可以考虑使用“here”文档来提高清晰度和性能,例如打印..... EOF
  • 不,我没试过。我不知道如何使用它。我应该在使用 Expect 语句之前包含吗??? @MarkSetchell
  • @MarkSetchell 我刚刚使用它,但如果我删除 log_user 0,它会给出内部服务器错误。我看到了我所有的登录详细信息并提示命令的去向。请帮助我
  • 应该是第一个 Expect 命令。

标签: javascript html perl cgi


【解决方案1】:

您可能需要在 Expect 脚本开始时关闭命令的记录/回显,如下所示:

$exp->log_user(0);

【讨论】:

  • 我想记录发生的事情并将其存储在一个文件中。这里可以吗?
  • 试试这个$exp-&gt;log_file("$host.log");
  • 保存在哪里?
  • 我认为它是“实时”出现的 - 您可能必须尝试将另一行更改为 $exp-&gt;log_user(1) 以重新启用消息,因为它之前为您关闭了消息。
  • 我希望 $exp->log_user(0) 禁用消息,但仍希望创建日志:(
猜你喜欢
  • 2013-05-13
  • 1970-01-01
  • 2012-01-19
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
相关资源
最近更新 更多