咱們能夠用groovy編寫平常的批處理腳本,相似windows下的bat或者unix下的shell。其具體的編寫方式很是簡單,好比咱們想要執行一個dir的命令,只要編寫一個test.groovy,其中內容爲:java
println 'cmd /c dir'.execute().text程序員
由於dir這個命令是在cmd命令中的,所以須要用cmd /c來進行調用。shell
具體執行就用相似以下的命令來執行:windows
groovy test.groovy函數
這樣就能顯示出當前目錄下的內容了。spa
在groovy中只要把字符串後面調用execute方法就能執行字符串中的命令,固然前提條件是這個字符串是相應平臺上的可執行命令,是否以爲很簡單。unix
在個人一個需求中,須要可以切換到指定路徑下執行相應的命令,所以須要有一個相似切換路徑的需求,或者說須要在指定路徑下執行某命令,相似實現以下:code
println 'cmd /c dir'.execute(null, new File("D:\\project\\mystudy2")).textblog
這樣上述的命令就能打印出某路徑下的文件信息了。 進程
這個字符串中可以執行相應的進程背後的核心就是調用JAVA中的Runtime.exec方法。
在進程處理中,有時咱們須要等待進程執行完成以後才能進行下面的操做,這個實現以下所示:
def proc = 'cmd /c dir'.execute()
proc.waitFor()
println proc.text
上面waitFor函數是永久等待,若是想要等待一段時間的用:
proc.waitForOrKill(1000)
其中的時間是毫秒爲單位。
進程中的輸入輸出流以及錯誤流能夠經過以下的方法得到:
InputStream in = proc.in InputStream err = proc.err OutputStream out = proc.out
其實,咱們上面proc的類型就是java中的java.lang.Process類,你們能夠參考這個類中的具體方法。
須要注意的是若是有的進程在執行過程當中有大量的內容輸出,而程序沒有把輸出緩衝區中的內容取走,會使這個進程給block住而不執行。
要把輸出緩衝區中的內容取走,能夠參考以下:
def inputStream = new InputStreamReader(proc.errorStream) BufferedReader bufferedReader = new BufferedReader(inputStream) while (true){ String s = bufferedReader.readLine() if (s == null){ break } } proc.waitFor()
還有相似的獲取輸出內容的方法以下所示:
def outputBuffer = new StringBuffer() def errorBuffer = new StringBuffer() zipProcess = 'gzip -c'.execute() unzipProcess = 'gunzip -c'.execute() unzipProcess.consumeProcessOutput(outputBuffer, errorBuffer) zipProcess.consumeProcessErrorStream(errorBuffer)
歡迎在本身的平常工做中對一些工做進行自動化。
程序員就是讓機器爲本身幹活。