gpt4 book ai didi

perl - 当反引号命令失败时如何在 Perl 中获取错误消息

转载 作者:行者123 更新时间:2023-12-01 06:17:29 27 4
gpt4 key购买 nike

我有一个变量 $deployment_tarfile 包含一个 tar 文件及其 svn 位置。在我的 Perl 脚本反引号命令中,我使用

$depsvn = `svn ls $deployment_tarfile` 

检查文件是否存在于 svn 中。如果失败,我们如何记录错误消息?

目前,如果命令失败,那么它只会显示在 shell 中。我想专门打印出来。我该怎么做?

我试过 $! 但它不显示。

$depsvn = `svn ls $deployment_tarfile`;
if ( $? != 0 ) {
print "$!"; # It displays blank
}

我也尝试过 $OS_ERROR$ERRNO 而不是 $! 但没有奏效。

如果 svn 命令失败,如何在 Perl 中打印错误信息?

更新:我使用的是 Perl 版本 5.8.8

最佳答案

要执行更复杂的程序,请使用 IPC::Run3 .

use strict;
use warnings;
use v5.10;

use IPC::Run3;

my $file = shift;

my($out, $err);
run3( ['svn', 'ls', $file], undef, \$out, \$err );
if( $? ) {
say "svn ls failed: $err";
}
else {
say "svn ls succeeded: $out";
}

如果您希望 STDOUT 和 STDERR 在同一个位置,您可以在两个位置提供相同的变量。

my $out;
run3( ['svn', 'ls', $file], undef, \$out, \$out );
if( $? ) {
say "svn ls failed: $out";
}
else {
say "svn ls succeeded: $out";
}

关于perl - 当反引号命令失败时如何在 Perl 中获取错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33397054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com