我在下面的代码,我可以运行$ 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;
}
答案 0 :(得分:5)
请记住,如perldoc -f system中所述,system
" ...的返回值是等待调用返回的程序的退出状态。要获得实际退出值,请向右移动8 ... "。将65280移位8会产生255。
但不幸的是,这也不是非常有用,因为据我所知,每个可能的cleartool
退出代码的确切含义都没有记录。我能找到的最接近的是cleartool documentation中的这个链接,其中说明了" 单命令模式的退出状态取决于命令是否成功(零退出状态)或生成错误消息(非零退出状态)。"
所以你有它; 255是非零退出状态,表示错误情况。从好的方面来说,也许它会产生一条你只是没有看到的错误信息。
作为一种故障排除技术,因为您已经打印$cmd
,所以从命令行调用cleartool
并使用与您的程序生成的命令相同的命令。如果得到相同的结果,则问题变为cleartool
问题,而不是Perl问题。幸运的是,错误条件会生成一条您实际可以看到的错误消息,而不仅仅是退出代码。
另一方面,如果您获得了正确的行为,请开始查看Perl运行时环境和命令行环境之间的不同之处;权限,环境变量,路径,工作目录等。
答案 1 :(得分:3)
使用cleartool时,最好确保使用ccperl
(now called ratlperl
),与ClearCase一起打包的perl,而不是latest Active Perl(which actually is the 5.14.2)。< / p>
因此,默认情况下,不是启动您的perl脚本,而是选择perl.exe
中提供的第一个%PATH%
,请尝试使用perl included with ClearCase之一调用它:
ratlperl
:在C:\Program Files\Rational\Common
。ccperl
:在C:\Program Files\Rational\ClearCase\bin
。并查看错误是否仍然存在。
根本原因是PATH
问题:有几个perl
可用:
通过确保PATH
仅引用一个perl
(ClearCase附带的那个),脚本可以成功启动。