将期望插入 Perl 循环



我有以下脚本运行命令并将数据放入数据库中。我需要考虑有时被要求输入密码"密码:"的可能性。如何将预期调用包装到其中?

#!/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("$passwordn");
                    exp_continue;
                }
            ]);

你没有在任何地方使用$expect。 您必须通过 $expect->spawn 运行命令,以便 Expect 对象可以处理事情。 然后你需要一些方法来收集它的输出(我正在考虑使用$expect->log_file(...)将日志设置为字符串文件句柄或其他东西)。

使用 $expect->spawn 后,您可以插入密码检查。 但是你无法用qx(反引号)做到这一点。

相关内容

  • 没有找到相关文章

最新更新