我有以下运行命令的脚本并将数据放入数据库中。我需要考虑在某些时候被要求输入密码“密码:”的可能性。如何将预期调用包装到此?
#!/usr/software/bin/perl
use strict;
use DatabaseLib;
use Data::Dumper;
use Expect;
#Connect to database
my $dbh = DBI->connect($DB_CONNECT_STRING, $DB_USER, $DB_PASSWORD, { RaiseError => 1, AutoCommit => 1 })
or die "failed to connect to database: $DB_CONNECT_STRING";
my $expect = Expect->new;
my %burtHash;
my @cols = qw/date_create sub_by impact date-lastmod lastmod-by bug_rel case_score state s p type subtype subteam found_by target_release/;
my @burtInfo = `mycommand`;
my $timeout = 20;
my $password = "password";
while(my $ele = shift(@burtInfo)){
my ($index, @data) = split(/\s+/, $ele);
for my $i(0 .. $#cols){
$burtHash{$index}->{$cols[$i]} = shift(@data);
}
for my $id (keys %burtHash){
my %burt_details;
for my $col (keys %{$burtHash{$id}} ) {
$burt_details{$col} = $burtHash{$id}->{$col};
}
if ( $id =~ /\d+/) {
burt_update(
$dbh,
$id ,
\%burt_details,
);
}
}
}
我想我只需要输入类似的内容并调用它,但我不知道在哪里/如何:
$expect->expect($timeout,
[ qr/password:/i, #/
sub {
my $self = shift;
$self->send("$password\n");
exp_continue;
}
]);
答案 0 :(得分:0)
你在那里的任何地方都没有使用$expect
。您必须通过$expect->spawn
运行命令,以便您的Expect对象可以处理事情。然后你需要一些收集输出的方法(我正在考虑使用$expect->log_file(...)
将日志设置为字符串文件句柄或其他东西)。
使用$expect->spawn
后,您可以插入密码检查。但是你无法用qx
(反对)来做到这一点。