咱们能够用groovy编写平常的批处理脚本,相似windows下的bat或者unix下的shell。其具体的编写方式很是简单,好比咱们想要执行一个dir的命令,只要编写一个test.groovy,其中内容为:java
println 'cmd /c dir'.execute().text程序员
由于dir这个命令是在cmd命令中的,所以须要用cmd /c来进行调用。shell
具体执行就用相似以下的命令来执行:windows
groovy test.groovy函数
这样就能显示出当前目录下的内容了。spa
在groovy中只要把字符串后面调用execute方法就能执行字符串中的命令,固然前提条件是这个字符串是相应平台上的可执行命令,是否以为很简单。unix
在个人一个需求中,须要可以切换到指定路径下执行相应的命令,所以须要有一个相似切换路径的需求,或者说须要在指定路径下执行某命令,相似实现以下:code
println 'cmd /c dir'.execute(null, new File("D:\\project\\mystudy2")).textblog
这样上述的命令就能打印出某路径下的文件信息了。 进程
这个字符串中可以执行相应的进程背后的核心就是调用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)
欢迎在本身的平常工做中对一些工做进行自动化。
程序员就是让机器为本身干活。