Question

Afin d'obtenir ma configuration un peu plus près « un clic de déploiement », je voudrais utiliser des scripts Groovy pour démarrer / arrêter d'autres processus contrôlés par les scripts de chauve-souris, en cours d'exécution dans différentes parties du système de fichiers et même sur des machines différentes.

Comment exécuter ces scripts et comment le faire de leur répertoire de travail respectif?

Je sais de Java

java.lang.Runtime's exec()

Cependant, il y a beaucoup de problèmes avec cela et je me demandais si Groovy avait une sorte de raccourci pour cela aussi?

Merci!

Était-ce utile?

La solution

Groovy a ajouté une méthode execute () à l'ancienne chaîne simple, alors essayez ceci:

println "ls -la".execute().text

Autres conseils

La méthode execute () peut être utilisé pour changer de répertoire si vous le préfixe avec la commande « cmd / c », puis utilisez esperluette (en supposant Windows) aux commandes de la chaîne ensemble.

Exemple, en supposant que vous voulez aller à la sous-répertoire subdir et exécuter quelques fichiers batch à partir de là:

println "cmd /c cd subdir & batch1.bat & batch2.bat".execute().text

Je ne sais pas s'il n'y a pas une meilleure façon, mais cela fonctionne.

Vous pouvez également utiliser ProcessBuilder qui est une classe Java étonnamment convienent introduit en java 5.

ProcessBuilder vous permet de

  • déterminer le répertoire de travail
  • déterminer les variables du processus devrait avoir

Voir http://download.oracle .com / JavaSE / 1.5.0 / docs / api / java / lang / ProcessBuilder.html pour un bref exemple et plus de documentation.

Si vous n'êtes pas peur de créer un code réutilisable, vous pouvez créer un objet qui enveloppe un processus .Execute (). J'ai créé quelque chose comme ça et l'utiliser régulièrement.

Créer un nouveau processus avec:

def proc = "cmd" .Execute ()

Après cela, vous pouvez utiliser « consumeProcessOutput () » pour gérer l'entrée et la sortie de « proc ». Tout ce que vous lui envoyez sera mis à exécution si vous avez tapé dans une coquille, et toute la sortie de cette enveloppe sera disponible pour vous.

J'enroulai tout cela dans une fermeture afin que vous puissiez faire ceci:

cmd("cd \\ \n dir ") {
    if(it.contains("AUTOEXEC.BAT")) 
        println it;
    return true;
}

Pour obtenir un affichage qui montre que la ligne autoexec.bat. Notez que jusqu'à votre retour vrai de la fermeture, le stdin de ce processus est disponible afin de pouvoir envoyer plusieurs lignes de texte et d'interagir avec indéfiniment.

Je l'utilise un peu parce que les commandes comme « cd » et « Dir » ne fonctionnent pas dans les fenêtres avec .Execute (), donc simple:

def directoryListing=cmd("cd\\\ndir")

me obtenir un répertoire rapide liste facilement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top