繁体   English   中英

Perl system()调用失败,返回码为65280

[英]Perl system() call failed with return code 65280

我在下面的代码,我可以运行$ retCode = ClearCase($ cmd); 没有错误,但运行时返回65280:$ retCode = ClearCase($ logcmd); 我尝试使用XP和Windows 2003服务器,结果相同,都使用ActiveState Perl v5.14.2。

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

谢谢Jirong

  $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;
}

请记住,正如perldoc -f系统中记录的那样, system...的返回值是等待调用返回的程序的退出状态。要获得实际的退出值,请向右移动8 ...... ”。 将65280移位8会产生255。

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

所以你有它; 255是非零退出状态,表示错误情况。 从好的方面来说,也许它会产生一条你只是没有看到的错误信息。

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

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

当使用cleartool,最好确保使用ccperl现在叫ratlperl ),与ClearCase打包perl的,而不是非常最新活动的Perl这实际上是5.14.2 )。

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

  • ratlperl :在C:\\Program Files\\Rational\\Common
  • 或者传统的ccperl :在C:\\Program Files\\Rational\\ClearCase\\bin

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

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

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

通过确保PATH仅引用一个perl (ClearCase附带的一个),脚本可以成功启动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM