perl脚本和HTML与CGI之间的接口(interface between perl script

2019-09-28 12:43发布

我是新来的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();

这些都是送的例子预期命令IAM用来登录到服务器并发送命令。 但我看到他们在浏览器中,他们会如何登录。 但我不希望这些可以看到浏览器,但他们仍然应该后台执行

####

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";

所以,当我试图在浏览器中发送那些期望运行命令,服务器登录提示都来了在浏览器上。 我不希望他们能够在浏览器上(他们应该只来在控制台),我只是想捕捉它的输出在数组中,并显示在浏览器形式的复选框。 请帮我Ø如何实现这一目标。 谢谢

Answer 1:

你可能需要关闭日志/在你期望的脚本开始命令的呼应,这样的:

$exp->log_user(0);


文章来源: interface between perl script and HTML with CGI