用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)
欢迎在自己的日常工作中对一些工作进行自动化。
程序员就是让机器为自己干活。
最新文章
- 关于 Raphael
- ARM 编译 phddns
- android radiogroup样式(设置切换背景与文字颜色)
- asp.net GDI+绘制五边形
- git 教程(5)--工作区和暂存区
- Q114第一颗二叉查找树(链式)
- 通过微信查找SAP TCODE代码
- 取消chrome浏览器下input和textarea的默认样式
- python - PyQuery
- 启动TOMCAT报错 java.util.zip.ZipException: invalid LOC header (bad signature)
- Apache使用mod_deflate模块压缩页面优化传输速度
- CSS下背景属性background的使用方法
- X-Scan使用教程
- C#打印九九乘法表
- 使用静态基类方案让 ASP.NET Core 实现遵循 HATEOAS Restful Web API
- [Linux]Linux read/write
- tensorflow-softmax
- 解决 iframe 后退不是主页面后退(浏览器 history)问题
- 关于Spring-Data-Jpa的一些理解
- vue-resource使用 (vue仿百度搜索)
热门文章
- Equivalent Sets HDU - 3836 2011多校I tarjan强连通分量
- where 和 having区别
- webstorm设置VCS:版本控制顶部按钮
- 虚拟机静态ip设置
- Centos 6.5 freeswitch 编译mod_shout
- Ex 2_4 假定您需要在以下三种算法中作出抉择..._第三次作业
- ubuntu安装jdk8
- 移动端的dl
- 开源框架 ImageLoader +ListView+GridView+RecyclerView 浅解
- strchr()