用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)
欢迎在自己的日常工作中对一些工作进行自动化。
程序员就是让机器为自己干活。
用groovy脚本进行每日工作的自动化【groovy】的更多相关文章
- jenkins2 groovy脚本参考
使用plugin生成groovy脚本,或者参考已有的groovy脚本. 文章来自:http://www.ciandcd.com文中的代码来自可以从github下载: https://github.co ...
- 使用 Java 执行 groovy 脚本或方法
1. 引入依赖 <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groo ...
- Java执行groovy脚本的两种方式
记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容:一种是执行groovy脚本: 二者都通过Invocab ...
- 即时编译和打包您的 Groovy 脚本(转)
在本文中将会涉及到: 使用 CliBuilder 来实现对命令行选项的支持,脚本执行时所需要的参数将通过命令行选项的方式传递. 使用 GroovyClassLoader 加载 Groovy class ...
- 180807-Quick-Task 动态脚本支持框架之Groovy脚本加载执行
Quick-Task 动态脚本支持框架之Groovy脚本加载执行 上一篇简答说了如何判断有任务动态添加.删除或更新,归于一点就是监听文件的变化,判断目录下的Groovy文件是否有新增删除和改变,从而判 ...
- soapUI系列之—-03 Groovy脚本常用方法2
------Groovy脚本常用方法 1.解析Json数据脚本 //groovy读取json的方式很简单,re.body.businessinfo.c2rate读取c2rate对应的值 import ...
- 复杂多变场景下的Groovy脚本引擎实战
一.前言 因为之前在项目中使用了Groovy对业务能力进行一些扩展,效果比较好,所以简单记录分享一下,这里你可以了解: 为什么选用Groovy作为脚本引擎 了解Groovy的基本原理和Java如何集成 ...
- [SoapUI] Post请求Body里面限制特殊字符(&、%),Groovy脚本里特殊字符需要添加“\”转义($)。
SoapUI的Post请求,在body里面不能包含(&.%),如果含有这些特殊字符,请求会报错:在添加的Groovy脚本里有些特殊字符需要使用“\”转义($),不然也会报错.
- ODI 12c中使用Groovy脚本创建工程
本文主要介绍在ODI中使用groovy创建工程,并添加一个表转换的映射.要创建groovy脚本,可以从ODI Studio的菜单:工具->Groovy->新脚本 打开一个编辑窗口.在执行下 ...
随机推荐
- VS2017中VC++项目添加StringTable资源
1.在资源视图中选择Resource.rc,右键弹出菜单,选择[添加资源] 2.在[添加菜单]对话框中选择[String Table],新建即可
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- HBase Snapshot简介
一.简介 HBase 从0.95开始引入了Snapshot,可以对table进行Snapshot,也可以Restore到Snapshot.Snapshot可以在线做,也可以离线做.Snapshot的实 ...
- java8 常用函数式接口
public static void main(String[] args) { // TODO Auto-generated method stub //函数式接口 Function<Inte ...
- [转] 为什么说 Java 程序员必须掌握 Spring Boot ?
Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,那么, Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot ...
- python创建udp服务端和客户端
1.udp服务端server from socket import * from time import ctime HOST = '' PORT = 8888 BUFSIZ = 1024 ADDR ...
- SqlBulkCopy 之 Received an invalid column length from the bcp client for colid 5.
SqlBulkCopy 批量复制报错: Received an invalid column length from the bcp client for colid 5. 翻译:从bcp客户端收到一 ...
- 8 张图帮你一步步看清 async/await 和 promise 的执行顺序(转)
https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651555491&idx=1&sn=73779f84c289d9 ...
- 弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
自从 2011 年发布以来,Kotlin 凭借强大的功能在开发者中的欢迎程度与日俱增.且在一年前,Google 宣布 Kotlin 正式成为 Android 官方开发语言,由此引发了从 Java 迁移 ...
- swift 学习- 18 -- 自动引用计数
// Swift 使用 自动引用计数 (ARC) 机制来跟踪和管理你的应用程序的内存, 通常情况下, Swift 内存管理机制会一直起作用, 你无须自己来考虑内存的管理, ARC 会在类的实例不再被使 ...