2012-09-20 15 views
5

Chcę wykonywać polecenia powłoki z mojego groovy skryptu. przetestowałem następujące:jak wywoływać polecenia powłoki z groovy poprawnie

"mkdir testdir".execute() 

i to właśnie działa dobrze. Teraz chciałem zrobić plik, napisać coś do pliku, a następnie otworzyć edytor tekstu, aby wyświetlić plik.

def execute(cmd) { 
    def proc = cmd.execute() 
    proc.waitFor() 
} 

execute("touch file") 
execute("echo hello > file") 
execute("gedit file") 

Teraz gedit otwiera się poprawnie, ale w pliku nie ma łańcucha "hello". Jak to działa?!?

Odpowiedz

4

Nie można zrobić przekierowanie w linii:

execute("echo hello > file") 

Więc nic nie zostanie zapisane do pliku. Najprostszym sposobem na obsłużenie tego jest prawdopodobnie zawinięcie wszystkich twoich poleceń do pojedynczego skryptu powłoki, a następnie wykonanie tego skryptu.

W przeciwnym razie można odczytać standardowe wyjście z polecenia echo (bez numeru > file), a następnie napisać to do użytkownika file w Groovy.

Albo można zrobić:

execute([ 'bash', '-c', 'echo hello > file' ]) 

które powinny działać jako metodę execute będzie po prostu wykonać the List.execute() method

+1

Nie wiem nic na temat 'groovy' wiedzieć; powiedziawszy, czy istnieje sposób na przekazanie metody 'execute' do przekazania linii poleceń do powłoki w celu przetworzenia przed wykonaniem, tak jak opcja' shell = True' dla modułu podprocesowego Python 'subprocess'? – chepner

+1

@chepner Właściwie masz rację ... jest sposób ... dodany do odpowiedzi –

+0

Dziękuję! to działa dobrze :) * Odpowiedź zaakceptowana * – Moonlit

Powiązane problemy