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


我們可以用groovy編寫日常的批處理腳本,類似windows下的bat或者unix下的shell。其具體的編寫方式非常簡單,比如我們想要執行一個dir的命令,只要編寫一個test.groovy,其中內容為:

println 'cmd /c dir'.execute().text

因為dir這個命令是在cmd命令中的,因此需要用cmd /c來進行調用。

具體執行就用類似如下的命令來執行:

groovy test.groovy

這樣就能顯示出當前目錄下的內容了。

 

在groovy中只要把字符串后面調用execute方法就能執行字符串中的命令,當然前提條件是這個字符串是相應平台上的可執行命令,是否覺得很簡單。

 

在我的一個需求中,需要能夠切換到指定路徑下執行相應的命令,因此需要有一個類似切換路徑的需求,或者說需要在指定路徑下執行某命令,類似實現如下:

println 'cmd /c dir'.execute(null, new File("D:\\project\\mystudy2")).text

這樣上述的命令就能打印出某路徑下的文件信息了。 

這個字符串中能夠執行相應的進程背后的核心就是調用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)

 

 

歡迎在自己的日常工作中對一些工作進行自動化。

程序員就是讓機器為自己干活。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM