从Grails应用程序执行命令

时间:2012-07-06 07:55:25

标签: java grails groovy process

我想从我的Grails应用中执行svn delete。我在Grails控制台中测试了以下两个内容:

"svn delete /usr/share/mydir".execute()

Runtime.getRuntime().exec("svn delete /usr/share/mydir")

在这两种情况下,都会返回java.lang.Process的实例,但命令不会被执行(/usr/share/mydir不会被删除)。

仅当应用程序在Linux(Ubuntu)上运行时才会发生此行为。如果我在Windows上运行它,命令就会被执行。

更新

根据Tim在评论中的建议,我更改了命令,以便捕获进程输出:

def process = "svn delete /usr/share/mydir".execute()
def out = new StringBuilder()
process.waitForProcessOutput(out, new StringBuilder())

println "$out"

我现在看到它失败的原因是:

  

错误svn:无法打开文件'/usr/share/mydir/.svn/lock':权限   拒绝

1 个答案:

答案 0 :(得分:3)

以下代码适用于CentOS。

    def scriptCom="/folderlocation/shellscript.sh"
    println "[[Running $scriptCom]]"
    def proc = scriptCom.execute()

    def oneMinute = 60000
    proc.waitForOrKill(oneMinute)

    if(proc.exitValue()!=0){
        println "[[return code: ${proc.exitValue()}]]"
        println "[[stderr: ${proc.err.text}]]"
        return null
    }else{
        println "[[stdout:$revisionid]]"
        return proc.in.text.readLines()
    }