代码之家  ›  专栏  ›  技术社区  ›  coding_hero

如何将一个文件句柄传递给PerlExpect的日志文件函数?

  •  0
  • coding_hero  · 技术社区  · 14 年前

    问这个我觉得很愚蠢,但我试过几件事,我不知道该怎么做。

    Expect.pm documentation :

    $object->log_file("filename" | $filehandle | \&coderef | undef)

    将会话记录到文件。发送或接收的所有字符 生成的进程将写入文件。

    我想把$filehandle传递到日志文件。但是,当我尝试这个的时候:

    open (LOG, ">>" .$opt{l});
    my $sess = Expect->spawn("telnet $ip");
    $sess->log_file(LOG)
    

    我在运行脚本的目录中得到一个名为“log”的文件。经过调查,我试过:

    open (LOG, ">>" .$opt{l});
    my $sess = Expect->spawn("telnet $ip");
    my $fh = *LOG;
    $sess->log_file($fh)
    

    现在,我得到一个名为 *main::LOG 在目录中。我也有另一个文件,命名为 -l 选项,但它只包含我发送到的行 print LOG .

    我不确定文件处理功能是在函数中承载的,还是我做错了什么。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Chas. Owens    14 年前

    LOG \*LOG perldoc perldata

    open my $log, ">>", $opt{l}
        or die "could not open $opt{l}: $!";
    

    $log

    strict warnings

        2
  •  1
  •   CanSpice    14 年前

    open die

    open my $logfh, ">>", $opt{l} or die "Could not open log file $opt{l}: $!\n";
    $sess->log_file( $logfh );
    

    LOG open() use autodie

        3
  •  0
  •   Zaid    14 年前

    log_file


    Expect documentation

    $object->log_file("filename" | $filehandle | \&coderef | undef)

    open()

    $object->log_file("filename", "w");

    my $sess = Expect->spawn("telnet $ip");
    $sess->log_file($opt{l});               # Or my $fh = $sess->log_file...
                                            # if that filehandle is needed