爲了讓我的設置更接近「一鍵式部署」,我想使用groovy腳本來啓動/停止由bat腳本控制的其他進程,這些腳本運行在文件系統的不同部分中,以及即使在不同的機器上。從Groovy運行腳本
如何執行這些腳本以及如何從的各自的工作目錄中執行這些腳本?
我知道Java的
java.lang.Runtime's exec()
但是有很多的問題,這個我不知道,如果Groovy中有某種速記的這個呢?
謝謝!
爲了讓我的設置更接近「一鍵式部署」,我想使用groovy腳本來啓動/停止由bat腳本控制的其他進程,這些腳本運行在文件系統的不同部分中,以及即使在不同的機器上。從Groovy運行腳本
如何執行這些腳本以及如何從的各自的工作目錄中執行這些腳本?
我知道Java的
java.lang.Runtime's exec()
但是有很多的問題,這個我不知道,如果Groovy中有某種速記的這個呢?
謝謝!
Groovy中添加了一個execute()方法,以普通的舊字符串,那麼試試這個:
println "ls -la".execute().text
的execute()方法可以使用,如果你用「CMD/C」命令前綴它改變目錄,然後使用&符號(假設Windows)將命令鏈接在一起。
例子,假設你想去子目錄子目錄並從那裏運行一對夫婦的批處理文件:
如果println "cmd /c cd subdir & batch1.bat & batch2.bat".execute().text
不知道有沒有更好的辦法,但這樣做的工作。
您還可以使用的ProcessBuilder是在Java中引入了一個令人驚訝的convienent Java類5
的ProcessBuilder讓你
查看http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html瞭解一個簡要示例和更多文檔。
我第二。這是[一篇博文](http://www.joergm.com/2010/09/executing-shell-commands-in-groovy/),它結合了Groovy和ProcessBuilder – FabienB 2015-01-27 13:45:26
如果您不害怕創建一些可重用的代碼,您可以創建一個包裝.execute()過程的對象。我創建了這樣的東西並定期使用它。
創建一個新的流程:
高清proc等於 「CMD」 .execute()
後,您可以使用 「consumeProcessOutput()」 來管理 「過程」 的輸入和輸出。您發送給它的任何內容都將按照您輸入到外殼中的方式進行操作,並且該外殼的所有輸出都將可供您使用。
我裹着這一切在一個封閉,這樣你可以這樣做:
cmd("cd \\ \n dir ") { if(it.contains("AUTOEXEC.BAT")) println it; return true; }
爲了得到一個顯示器只顯示AUTOEXEC.BAT線。請注意,除非您從閉包中返回true,否則該過程的標準輸入可用,因此您可以發送更多行文本並無限期地與其交互。
我用它頗有幾分,因爲像「CD」和命令「目錄」不與.execute(窗口工作),所以一個簡單的
def directoryListing=cmd("cd\\\ndir")
會得到我一個快速目錄列表輕鬆。
我仍然不確定要改變工作目錄。 – 2009-08-26 13:35:56
到目前爲止感謝!很喜歡它! – raoulsson 2009-08-26 13:46:33