Perl 脚本无缘无故挂起

问题描述 投票:0回答:2

所以我有这个小脚本,它检查两个日志文件中的特定行并比较这些行。 该脚本用于多个不同的 Windows Bamboo Agent。但在其中之一上它只是挂起并且不退出。由于该脚本在竹子中使用,因此当该脚本不退出时,整个作业将挂起。 当我通过远程访问检查计算机并终止脚本时,作业将继续,直到再次到达脚本。

这是脚本,它是由另一个脚本启动的。

#! /usr/bin/perl
my $naluresult = 2;
my $hevcresult = 2;
my $hevcfailed = 0;

use strict;
use warnings;

#---------------------------------------------
#check for $ARGV[0] and $ARGV[1]

open( my $nalulog, "<", $ARGV[1] )
    or die "cannot open File:$!\n\n";
while (<$nalulog>) {
    chomp;
    $_ =~ s/\s+//g;
    if ( $_ =~ m/MD5:OK/ ) {
        $naluresult = 1;
    } else {
        if ( $_ =~ m/MD5:MISSING/ ) {
            $naluresult = 0;
        }
    }
}
close $nalulog;

#---------------------------------------------

open( my $hevclog, "<", $ARGV[0] )
    or die "cannot open File:$!\n\n";

while (<$hevclog>) {
    chomp;
    $_ =~ s/\s+//g;
    if ( $_ =~ m/MD5check:OK/ ) {
        $hevcresult = 1;
        last;
    } else {
        if ( $_ =~ m/MD5check:FAILED/ ) { $hevcfailed = 1; }
    }
    if ( $hevcfailed == 1 ) {
        #do stuff
    }
}
close $hevclog;

#---------------------------------------------

if ( $hevcresult == 2 ) {
    print("Missing MD5 status in HEVC Output");
    exit(-1);
} elsif ( $naluresult == 2 ) {
    print("Missing MD5 status in NALU Output");
    exit(-2);
} else {
    if ( $naluresult == $hevcresult ) { exit(0); }
    else {
        #different if-statements to print() to log
        exit(1);
    }
}

#---------------------EOF---------------------
windows perl
2个回答
0
投票

如果您的文件只是普通的磁盘文件,没有被其他进程同时写入,或者被锁定,或者类似的东西,那么您这里的代码中没有任何内容应该挂起。如果文件的大小都合理,则此处的代码应该通读文件并完成。

但是,如果其中一个文件被锁定,或者非常大,或者您有其他代码可能陷入无限循环,那就可以解释为什么您的程序挂起。


0
投票

我的意思是我对 Windows 环境中的 Perl 不太了解,但我认为如果您可以在代码中添加打印内容以准确指出问题所在,这将极大地帮助您找到解决方案。

打开文件时脚本是否挂起? 循环永远不会结束吗?

我不能说在 Windows 上,但在 Linux 上,如果文件是命名管道,它永远不会到达 EOF,所以你可能会看到挂在读取上

就您的脚本而言,我会将

else { if (...){...
替换为
elsif(...){...
只是因为它更干净(但我承认这超出了您的问题范围)

如果您发现您要读取的文件太大,您可以在读取所需的行后通过跳出循环(

last
)来加快速度。

在 Perl 脚本之外,如果附加文件而不是覆盖文件,文件可能会变得太大?

© www.soinside.com 2019 - 2024. All rights reserved.