Thread Can't spwan "cmd.exe": Perl, Windows, system, >> (13 answers)
Opened by Crian at 2005-05-02 18:10

Crian
 2005-05-02 18:10
#54385 #54385
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Ich hab ein blödes, sporadisch auftretendes Problem unter Windows 2000 und Windows XP: Ab und zu (meistens geht es gut) produziert die Zeile
Code: (dl )
system("$FindBin::Bin/rt.pl $xf >> $FindBin::Bin/../log/$ts.log");

die im Titel beschriebene Fehlermeldung
Code: (dl )
Can't spawn "cmd.exe": No such file or directory at  ... 



Allerdings tritt diese Meldung nicht unmittelbar beim Durchlaufen dieses Befehls auf, sondern mitten bei der Abrarbeitung des aufgerufenen Perl-Programms. Vermutlich an einer Stelle, wo an das Logfile angehängt werden soll.

Der Fehler ist nicht an Ort und Stelle reproduzierbar, die angemeckerten Aufrufe klappen im nächsten Versuch wunderbar, dafür meckert er dort dann an anderer Stelle. Das ganze System ist ein Rahmenprogramm, das in einer Schleife einzelne Dateien an rt.pl verfüttert und bei Gesamterfolg am Ende eine Nachverarbeitung anstößt. Ich könnte jetzt natürlich auch alle Funktionalitäten aus rt.pl in ein Modul auslagern und dann in rt.pl und in diesem Programm die entsprechenden Funktionen anziehen, aber eigentlich sollte es doch wohl auch so irgendwie gehen.

Die Perl-Version ist in beiden Fällen Active State 5.6.8.

Ich habe hier schon eine Diskussion zu einem ähnlichen Problem gefunden, allerdings ist auf den genannten Systemen kein Cygwin installiert. Das Problem scheint irgendwie das Anhängen an die Datei zu sein.

Bevor ich jetzt aber "aufgebe" und diese rudimentäre Betriebssystemfunktionalität in Perl nachbilde, wollte ich nachfragen, ob hier jemand vielleicht das Problem kennt und eine Lösung dafür hat.


Besonders nervig ist es unter XP, weil da vor dieser Meldung erstmal die schöne Dialogbox "Perl Command line Interpreter hat ein Problem festgestellt und muss beendet werden .... an Microsoft senden?" aufgeht, und erst nach dem Klick auf "nicht senden" die oben gennannte Fehlermeldung auftritt. Das ist besonders lästig, da der Programmlauf hier unnötig unterbrochen wird und das aufrufende Programm nicht (bzw. erst nach der Benutzerinteraktion) die Chance bekommt, $? auszuwerten.



Ich werde mal testen, ob es etwas ändert, die Befehle vorher in eine temporäre xyz.cmd Datei zu schreiben und dann diese per System auszuführen. Wäre aber irgendwie unelegant.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread Can't spwan "cmd.exe": Perl, Windows, system, >>