为了让我的设置更接近“一键部署”,我想使用 groovy 脚本来启动/停止由 bat 脚本控制的其他进程,在文件系统的不同部分甚至不同的机器上运行。

如何执行这些脚本以及如何执行 他们的 各自的工作目录?

我知道Java的

java.lang.Runtime's exec()

然而这有很多问题,我想知道 Groovy 是否也有某种速记法?

谢谢!

有帮助吗?

解决方案

Groovy的加入execute()方法,以普通的旧字符串,所以尝试这样:

println "ls -la".execute().text

其他提示

在execute()方法可用于如果与“CMD / C”命令前缀它改变目录,然后用符号(假定视窗),以链的命令一起。

例如,假如你想去子目录的子目录的,并且运行了几个批处理文件:

println "cmd /c cd subdir & batch1.bat & batch2.bat".execute().text

不知道,如果没有更好的办法,但这样做的工作。

您还可以使用 ProcessBuilder,它是 java 5 中引入的一个非常方便的 Java 类。

ProcessBuilder 让您

  • 确定工作目录
  • 确定流程应具有哪些环境变量

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html 获取简短示例和更多文档。

如果你不怕创建一些可重用代码可以创建一个包装了.execute()处理的对象。我创造了这样的事情,并经常使用它。

创建一个新的过程:

DEF PROC = “CMD” .execute()

在此之后可以使用“consumeProcessOutput()”来管理的“PROC”的输入和输出。任何你发送给它就会采取行动,就好像您键入它变成一个壳,而外壳的所有的输出将提供给你。

我裹着这一切在一个封闭,这样你可以这样做:

cmd("cd \\ \n dir ") {
    if(it.contains("AUTOEXEC.BAT")) 
        println it;
    return true;
}

要得到一个显示器,其仅示出了AUTOEXEC.BAT线。需要注意的是,直到你从封闭返回true,该进程的标准输入可用,因此你可以发送多行文字,并用它无限互动。

我用它颇有几分,因为像“CD”和命令“目录”不与.execute(窗口工作),所以一个简单的:

def directoryListing=cmd("cd\\\ndir")

将得到我一个快速目录轻松上市。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top