Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用CGI实现perl脚本与HTML的接口_Javascript_Html_Perl_Cgi - Fatal编程技术网

Javascript 用CGI实现perl脚本与HTML的接口

Javascript 用CGI实现perl脚本与HTML的接口,javascript,html,perl,cgi,Javascript,Html,Perl,Cgi,我不熟悉Perl和HTML。我已经用Perl编写了一个后端脚本,使用send expect语句,用于循环和子例程。在Perl脚本中,我登录到服务器并发送一些命令,期望服务器提示并最终退出。我使用CGI作为一个框架来实现这一点。这是我的部分代码 #!/usr/bin/perl use Expect; use Switch; use warnings; use 5.008; use Data::Dumper; use CGI; my $q = CGI->new; my %data; $d

我不熟悉Perl和HTML。我已经用Perl编写了一个后端脚本,使用send expect语句,用于循环和子例程。在Perl脚本中,我登录到服务器并发送一些命令,期望服务器提示并最终退出。我使用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();
#/usr/bin/perl
使用Expect;
使用开关;
使用警告;
使用5.008;
使用数据::转储程序;
使用CGI;
my$q=CGI->新建;
我的%数据;
$data=$q->param('server');
打印$q->标题;
如果($data eq'null')
{
打印“请选择服务器”

; 出口 } ### $exp->spawn($command,@parameters) 或死亡“无法生成$命令:$!\n”; $exp->send(“字符串\n”); $exp->expect($timeout,@match_patterns); $exp->expect$超时, [qr/regex1/=>sub{my$exp=shift; $exp->send(“response\n”); exp_continue;}], [“regexp2”,\&callback,@cbparms], ); $exp->soft_close();
以下是iam用于登录服务器和发送命令的send expect命令的示例。但我在浏览器中看到他们将如何登录。但我不想在浏览器上看到这些,但它们仍然应该在后台执行

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

打印“Hello World\n”;
打印“\n”;
打印“已检查”为假;函数checkedAll(){if(checked==false){checked=true}else{checked=false}(var i=0;i”;
每个$i(@全部成功){
打印“”;
打印$i;
打印“
”; } 打印“”; 打印“”; 打印“\n”;
因此,当我试图在浏览器中运行那些发送expect命令时,浏览器上会出现服务器登录提示。我不希望它们出现在浏览器上(它们应该只出现在控制台中),我只希望在数组中捕获其输出,并在浏览器上显示表单的复选框。请帮助我如何做到这一点。
谢谢

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

$exp->log_user(0);

您是否在expect脚本中尝试了
log\u用户0
?它关闭了命令和结果的记录。顺便说一下,您的脚本中有很多打印语句,您可以考虑使用“这里”文档来提高清晰度和性能,例如PrtnNO我没有尝试过。我不知道如何使用它。我应该在使用Expect语句之前包含它吗@MarkSetchell@MarkSetchell我刚刚使用了它,但如果我删除了用户0的日志,它会给出内部服务器错误。我看到了我所有的登录详细信息和命令的提示。请帮助meIt应该是第一个Expect命令。我想记录正在发生的事情并将其存储在一个文件中。这里可能吗?试试这个
$exp->log_文件($host.log”)
它将保存在哪里?我认为它是“实时”出来的-您可能必须尝试将另一行更改为
$exp->log\u user(1)
,以重新启用消息,因为它以前为您关闭了消息。我希望$exp->log\u user(0)禁用消息,但仍然希望创建一个日志:(