程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 用groovy腳本進行每日工作的自動化【groovy】,groovy腳本自動化

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

編輯:JAVA綜合教程

用groovy腳本進行每日工作的自動化【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)

 

 

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

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved