用groovy腳本進行每日工做的自動化【groovy】

咱們能夠用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)

 

 

歡迎在本身的平常工做中對一些工做進行自動化。

程序員就是讓機器爲本身幹活。

相關文章
相關標籤/搜索