perl – 从GNU parallel获取退出状态值

前端之家收集整理的这篇文章主要介绍了perl – 从GNU parallel获取退出状态值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
下面的Perl包装器并行执行命令,保存STDOUT
和STDERR到/ tmp文件

open(A,"|parallel"); 
for $i ("date","ls","pwd","factor 17") { 
  print A "$i 1> '/tmp/$i.out' 2> '/tmp/$i.err'\n"; 
} 
close(A);

如何从各个命令获取退出状态值?

解决方法

要获得各个作业的存在状态,并行需要在某处写入信息.我不知道是不是.如果没有,你可以自己做.

my %jobs = (
   "date"   => "date","ls"     => "ls","pwd"    => "pwd","factor" => "factor 17",);

open(my $parallel,"|parallel"); 
for my $id (keys(%jobs)) {
   print $parallel
      $jobs{$id}
      ." 1> '/tmp/$id.out'"
      ." 2> '/tmp/$id.err' ; "
      ."echo \$?"
      ." > '/tmp/$id.exit'\n"; 
} 

close($parallel); 

my $exit_status = $? >> 8;
if ($exit_status >= 255) {
    print("Failed\n");
} else {
    printf("%d Failed jobs\n",$exit_status);
}

for my $id (keys(%jobs)) {
    ...grab output and exit code from files...
}

更新:我去了并行安装.

它有一个名为–joblog {file}的选项,它生成一个包含退出代码的报告.如果要将其输出到STDOUT,它接受 – 用于文件名.

请注意,并行不会识别信号异常死亡,因此这不包含在–joblog报告中.使用我上面发布的解决方案,缺少.exit文件将表明异常死亡. (但你必须确保它首先不存在.)

猜你在找的Perl相关文章