gpt4 book ai didi

perl - 如何在 Perl 中捕获输出和退出代码时执行外部脚本?

转载 作者:行者123 更新时间:2023-12-04 10:45:35 26 4
gpt4 key购买 nike

我正在尝试从 Perl 脚本中检查是否存在 SVN 标记。所以我尝试调用svn info $url ,读取退出代码并抑制标准输出和标准错误流。但是,我很难优雅地做到这一点(可能有更好的方法向 SVN 询问标签,但这不是重点):

my $output = `svn info $url/tags/$tag`;

这会抑制输出,同时将其放入 $output .退出代码丢失。
my $output = `svn info $url/tags/$tag 2>&1`;

这会抑制 STDERR 和 STDOUT 并将它们都放入 $output .退出代码再次丢失。
my $exitcode = system("svn", "info", "$url/tags/$tag");

这会捕获退出代码,但用户可以看到实际的输出和错误流。
open( STDERR, q{>}, "/dev/null" );
open my $fh, q{>}, "/dev/null";
select($fh);
if (system("svn", "info", "$url/tags/$tag") != 0) {
select(STDOUT);
print ("Tag doesn't exist!");
do_something_with_exit();
}
select(STDOUT);
print "Exit code: $exitcode";

这会杀死 STDOUT 和 STDERR 并捕获退出代码,但这很丑陋,因为我必须记住将 STDOUT 切换回原始代码。

那么,有没有更优雅的解决方案呢?

最佳答案

尝试使用 $? 。例如。

my $output = `svn info $url/tags/$tag`;
my $extcode = $?>>8;

关于perl - 如何在 Perl 中捕获输出和退出代码时执行外部脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206111/

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