4

我在下面运行 perl 代码。

$retCode = ClearCase($cmd); 

可以正常工作,但是65280当我运行它时它会返回:

$retCode = ClearCase($logcmd); 

我在 XP 和 Windows 2003 服务器上尝试过,结果相同,都使用 ActiveState Perl v5.14.2。

这段代码在 2 年前在其他地方工作。

  $g_HPPC_DEV_DRIVE =  "M";
  $g_HPPC_DEV_VIEW = "bldforge_AOMS_DEV";
  $g_logfile = "logfile.txt";
  
  $cmd = "startview $g_HPPC_DEV_VIEW";
  $logcmd = $cmd . " >> $g_logfile 2>>&1";
  
  $targetDir = $g_HPPC_DEV_DRIVE . ":\\" . $g_HPPC_DEV_VIEW;
  print "\$targetDir = $targetDir\n"; 
  print "Starting view .......\n"; 
  #$retCode = system("cleartool startview bldforge_AOMS_DEV >> logfile.txt");
  #$retCode = `cleartool startview bldforge_AOMS_DEV`;

  $retCode = ClearCase($logcmd);
  #$retCode = ClearCase($cmd);

sub ClearCase
{
  my $retCode = 0;
  my $args = $_[0];

  my $cmd = "cleartool " . $args;
  $retCode = Execute($cmd);

  return $retCode;

}

sub Execute
{
  my $retCode = 0;
  my $cmd = $_[0];

  if ($g_HPPC_BUILD_SIMULATION ne "Y")
  {
     
     print("Execute() Running...:   $cmd\n");     
     $retCode = system($cmd);
     #$retOut = `$cmd`;     
     #$retCode = $?;
     #print("Command execute output: $retOut\n");
  }
  else
  {
     print("Execute() *** SIMULATION:   $cmd\n");     
  }

  print("Execute() retCode = $retCode, $cmd\n");
  
  return $retCode;
}

这个 65280 退出代码是什么意思?

4

2 回答 2

6

请记住,如perldoc -f systemsystem中所述, “ ...的返回值是等待调用返回的程序的退出状态。要获得实际的退出值,请右移 8... ”。将 65280 移动 8 得到 255。

但不幸的是,这也不是很有帮助,因为据我所知,每个可能的cleartool退出代码的确切含​​义都没有记录。我能找到的最接近的是cleartool 文档中的这个链接,其中它指出,“单命令模式的退出状态取决于命令是成功(零退出状态)还是生成错误消息(非零退出状态)。

所以你有它; a 255 是一个非零退出状态,表示错误情况。从好的方面来说,它可能会生成一条您没有看到的错误消息。

作为一种故障排除技术,由于您已经在打印$cmd,因此从命令行调用cleartool您的程序生成的相同命令。如果你得到相同的结果,那么问题就变成了一个cleartool问题而不是 Perl 问题。幸运的是,错误条件会生成一条您可以实际看到的错误消息,而不仅仅是退出代码。

另一方面,如果您得到正确的行为,请开始查看 Perl 运行时环境和命令行环境之间的不同之处;权限、环境变量、路径、工作目录等

于 2012-08-16T17:18:52.237 回答
3

使用 cleartool 时,最好确保使用ccperl现在称为ratlperl)与 ClearCase 一起打包的 perl,而不是最新的 Active Perl实际上是 5.14.2)。

因此,不要默认启动你的 perl 脚本,而是选择你的第一个perl.exe可用的脚本%PATH%,尝试使用 ClearCase 中包含的 perl调用它:

  • ratlperl: 在C:\Program Files\Rational\Common
  • 或遗产ccperl:在C:\Program Files\Rational\ClearCase\bin.

并查看错误是否仍然存在。

根本原因是一个PATH问题:有几个perl可用:

  • 来自 Rational ClearCase
  • 来自 Active Perl 的那个

通过确保PATH唯一的参考perl(ClearCase 附带的),脚本可以成功启动。

于 2012-08-16T17:53:09.100 回答