【发布时间】: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