L’appel Perl system () a échoué avec le code retour 65280

Je le code ci-dessous, je peux exécuter $ retCode = ClearCase ($ cmd); sans erreur, mais retournez 65280 quand vous lancez ceci: $ retCode = ClearCase ($ logcmd); J’ai essayé sur XP et Windows 2003 Server, même résultat, le tout avec ActiveState Perl v5.14.2.

Ce code fonctionnait il y a 2 ans ailleurs.

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

    Lors de l’utilisation de cleartool, il est préférable de s’assurer d’utiliser ccperl ( maintenant appelé ratlperl ), le perl ratlperl à ClearCase, au lieu du tout dernier Active Perl ( qui est en fait le 5.14.2 ).

    Ainsi, au lieu de lancer votre script perl par défaut, en récupérant le premier perl.exe disponible dans votre %PATH% , essayez de l’appeler avec l’un des perl inclus avec ClearCase :

    • ratlperl : dans C:\Program Files\Rational\Common .
    • ou hérité ccperl : dans C:\Program Files\Rational\ClearCase\bin .

    Et voyez si l’erreur persiste.

    La cause principale était un problème PATH : plusieurs perl étaient disponibles:

    • ceux de Rational ClearCase
    • celui de Active Perl

    En veillant à ce que PATH fasse référence à un seul perl (celui fourni avec ClearCase), le script pourrait être lancé avec succès.

    Rappelez-vous que, comme indiqué dans le système perldoc -f , la valeur de retour du system… est le statut de sortie du programme renvoyé par l’appel en attente. Pour obtenir la valeur de sortie réelle, déplacez-vous de huit … “. Déplacement de 65280 par 8 rendements de 255.

    Mais malheureusement, cela n’est pas très utile non plus, car, pour autant que je puisse en juger, la signification exacte de chaque code de sortie possible n’est pas documentée. Le lien le plus proche que je puisse trouver est ce lien dans la documentation de cleartool , dans lequel il indique: ” Le statut de sortie du mode de commande unique dépend du succès de la commande (état de sortie zéro) ou du message d’erreur (état de sortie différent de zéro).

    Alors voilà! un 255 est un statut de sortie différent de zéro, ce qui indique une condition d’erreur. Du côté positif, cela génère peut-être un message d’erreur que vous ne voyez pas.

    En tant que technique de dépannage, puisque vous imprimez déjà $cmd , à partir de la ligne de commande, cleartool avec la même commande que votre programme a générée. Si vous obtenez le même résultat, la question devient une question cleartool plutôt qu’une question Perl. Et avec un peu de chance, cette condition d’erreur générera un message d’erreur que vous pouvez réellement voir plutôt qu’un simple code de sortie.

    D’un autre côté, si vous obtenez un comportement correct, commencez par examiner les différences entre l’environnement d’exécution Perl et l’environnement de ligne de commande. permissions, variables d’environnement, chemins d’access, répertoire de travail, etc.