用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->新脚本 打开一个编辑窗口.在执行下 ...
随机推荐
- FFmpeg Scaler Options
算法 帧率 图像主观感受 SWS_FAST_BILINEAR 228 图像无明显失真,感觉效果很不错. SWS_BILINEAR 95 感觉也很不错,比上一个算法边缘平滑一些. SWS_BICUBIC ...
- CentOS7安装和配置MySQL
1. 下载MySQL Yum Repository http://dev.mysql.com/downloads/repo/yum/ 2. 本地安装MySQL Yum Repository s ...
- Android跳转WIFI界面的四种方式
第一种 Intent intent = new Intent(); intent.setAction("android.net.wifi.PICK_WIFI_NETWORK"); ...
- 自然语言处理之关键词提取TF-IDF
统计每篇文章重要的词作为这篇文章的关键词,用tf-idf来实现.生产中有很多第三包可以调用,这里记录原理,顺便熟练python 1.公式 : 计算词频TF 考虑到文章有长短之分,为了便于不同文章的比较 ...
- Oracle 查询优化的基本准则详解
注:报文来源:想跌破记忆寻找你 < Oracle 查询优化的基本准则详解 > Oracle 查询优化的基本准则详解 1:在进行多表关联时,多用 Where 语句把单个表的结果集最小化, ...
- JavaScript从入门到精通(附光盘1张):作者:明日科技出版社:清华大学出版社出版时间:2012年09月
本书介绍 一:本书 pdf 获取信息 本书下载:请申请加入本群 (QQ群:668345923), 并联系群主. 本群主有:本书pdf 全文教材 及附带的 光盘内容 二:本书目录介绍 第1篇 基 ...
- js数组的实例方法sort() 排序方法的运用,不再只是.sort()
1, sort() 不传回调函数的话,默认按照字母顺序(字符编码)的顺序进行排序. 2, sort() 通过传回调函数来控制从小到大的排序还是从大到小的排序: var arr = [1,23,5,6, ...
- PhpStorm 2018 安装及破解方法
参考教程: https://blog.csdn.net/u012278016/article/details/81772566
- LeetCode(78):子集
Medium! 题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3 ...
- Distance
1191: Distance 时间限制: 1 Sec 内存限制: 32 MB 题目描述 There is a battle field. It is a square with the side l ...