2010-08-10 6 views
3

Ok, relisez-le. J'ai besoin d'ouvrir une invite Windows avec Perl. C'est parce que je veux que plusieurs invites exécutent des scripts Perl en parallèle, mais ne veulent pas les ouvrir tous à la main. Je veux donc un script que je peux appeler (host), dire le nombre d'invites de commande à ouvrir (clients), le chemin du script client à exécuter, et même mettre des entrées si les clients le demandent. Alors, deux choses importantes:Comment ouvrir une invite de commandes avec Perl?

  1. Comment ouvrir une invite avec un script perl

  2. Comment passer à l'entrée qui invite

Merci! (PS Je sais que ce serait une énorme erreur d'exécuter un script hôte qui appelle le même script hôte, j'espère que mon patron ne fait pas cela: P)

Répondre

5

Ceci est une question DOS/Windows, pas une question Perl.

Utilisez

system("start cmd.exe /k $cmd") 

Voir start /? et cmd /?.

6

Cela peut ne pas être une question Perl, pour ainsi dire, mais une question Windows. Je suppose que ce que vous voulez faire est d'appeler "Démarrer <options> <script>".

Par exemple:

my $cmd = "perl -w otherscript.pl"; 
my $result = system("start /LOW $cmd"); 

Cela devrait commencer la commande désirée dans une nouvelle fenêtre et revenir immédiatement. Tapez start /? pour les autres options qui peuvent changer la priorité du nouveau script, masquer la fenêtre suivante ou exécuter dans la fenêtre en cours.

+0

Ok, cela semble prometteur. Maintenant un autre gros problème: si l'un des scripts meurt, je veux que l'invite reste ouverte pour afficher l'erreur. J'ai regardé dans les options, mais je ne sais pas exactement quelle option le ferait, le savez-vous? De plus, j'ai besoin de l'invite pour être au même endroit que le script, pas seulement à partir de l'emplacement actuel, devrais-je utiliser l'option "I"? –

+0

Peut-être que vous pouvez dire '$ cmd =" ​​script.exe || cmd.exe ";' qui indiquerait à Windows d'exécuter CMD.exe si votre script a échoué. Peut-être ne pas être la bonne approche si. –

Questions connexes