zoukankan      html  css  js  c++  java
  • 用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)

     

    欢迎在自己的日常工作中对一些工作进行自动化。

    程序员就是让机器为自己干活。

  • 相关阅读:
    AngularJS--学习笔记(一)
    一行代码写出随机数
    2015最新--浏览器分布图
    JQ系列:css操作
    Eclipse启动Tomcat,45S超时问题解决
    深入理解浏览器兼容性模式
    常见浏览器兼容性问题与解决方案
    面向对象设计模式之一观察者模式
    自定义样式RatingBar的使用
    Python之Matplot——01.堆叠柱状图的绘制
  • 原文地址:https://www.cnblogs.com/dreampursuer/p/5569266.html
Copyright © 2011-2022 走看看