Pergunta

A fim de obter a minha configuração um pouco mais perto de "um clique de implantação", eu gostaria de usar scripts groovy para iniciar/parar a outros processos controlados pelo bastão de scripts em execução em diferentes partes do sistema de arquivos e até mesmo em máquinas diferentes.

Como executar esses scripts e como fazê-lo a partir de seus respectivo directório de trabalho?

Eu sei do Java

java.lang.Runtime's exec()

No entanto, existem muitos problemas com isso e eu me perguntava se Groovy tinha algum tipo de taquigrafia para esta bem?

Obrigado!

Foi útil?

Solução

Groovy adicionou um método Execute () à corda antiga simples, então tente o seguinte:

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

Outras dicas

O método Execute () pode ser usado para alterar os diretórios se você o prefixar com o comando "CMD /C" e, em seguida, use o AMPERSAND (assumindo o Windows) para acorrentar os comandos.

Exemplo, assumindo que você deseja ir ao subdiretório subdir e execute alguns arquivos em lote a partir daí:

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

Não tenho certeza se não há uma maneira melhor, mas isso funciona.

Você também pode usar ProcessBuilder que é um surpreendentemente convienent classe Java introduzidos no java 5.

ProcessBuilder permite que você

  • determinar o diretório de trabalho
  • determinar quais variáveis ambientais o processo deveria ter

Ver http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html por um breve exemplo e mais documentação.

Se você não tem medo de criar algum código reutilizável, poderá criar um objeto que envolva um processo .Execute (). Eu criei algo assim e o uso regularmente.

Crie um novo processo com:

def proc = "cmd" .execute ()

Depois disso, você pode usar "ConsumeProcessOutput ()" para gerenciar a entrada e saída de "proc". Tudo o que você enviar para ele será agido como se você o digitasse em um shell, e toda a saída desse shell estará disponível para você.

Eu embrulhei tudo isso em um fechamento para que você pudesse fazer isso:

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

Para obter uma tela que mostra apenas a linha AutoExec.bat. Observe que, até que você retorne true do fechamento, o stdin desse processo está disponível para que você possa enviar mais linhas de texto e interagir com ele indefinidamente.

Eu o uso bastante porque comandos como "CD" e "dir" não funcionam no Windows com .execute (), então um simples:

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

Vai me dar uma lista rápida de diretório com facilidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top