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

来源:http://www.cnblogs.com/dreampursuer/archive/2016/06/08/5569266.html
-Advertisement-
Play Games

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


我們可以用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)

 

 

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

程式員就是讓機器為自己幹活。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用multiprocessing 使用multiprocessing.dummy 單使用multiprocessing模塊的指的是多進程,使用multiprocessing.dummy則表示使用的是多線程 ...
  • python flask detect browser language No problem. We won't show you that ad again. Why didn't you like it? Uninteresting Misleading Offensive Repetitiv ...
  • TODO ...
  • JSON的用途 使用基於JavaScript的應用程式,其中包括瀏覽器擴展和網站 使用JSON格式序列化和結構化的數據傳輸網路連接 這主要用於伺服器和Web應用程式之間的數據傳輸 Web服務和API採用JSON格式提供公共數據 它可以用來與現代編程語言 JSON的特點 易於讀寫JSON 輕量級的基於 ...
  • 概述 OTP 平臺的容錯性高,是因為它提供了機制來監控所有 processes 的狀態,如果有進程出現異常, 不僅可以及時檢測到錯誤,還可以對 processes 進行重啟等操作。 有了 supervisor,可以有效的提高系統的可用性,一個 supervior 監督一個或多個應用, 同時, sup ...
  • 十進位轉二進位,除2運算 十進位6轉二進位是 110 (註意從右往左寫,使用算式從下往上寫) 二進位轉十進位,乘2過程 二進位110轉十進位 0*2的0次方+1*2的1次方+1*2的2次方=6 對應關係 0 1 0 1 0 1 32 16 8 4 2 1 把1對應的位置的數加起來就可以了,所以是21 ...
  • 一、CAS和synchronized適用場景 1、對於資源競爭較少的情況,使用synchronized同步鎖進行線程阻塞和喚醒切換以及用戶態內核態間的切換操作額外浪費消耗cpu資源;而CAS基於硬體實現,不需要進入內核,不需要切換線程,操作自旋幾率較少,因此可以獲得更高的性能。 2、對於資源競爭嚴重 ...
  • Python支持四種不同的數值類型,包括int(整數)long(長整數)float(浮點實際值)complex (複數),本文章向碼農介紹python 四種數值類型,需要的朋友可以參考一下。 數字數據類型存儲數值。他們是不可改變的數據類型,這意味著改變數字數據類型的結果,在一個新分配的對象的值。Nu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...