Groovy添加了execute方法,String使执行shell相当容易;
println "ls".execute().text
Run Code Online (Sandbox Code Playgroud)
但如果发生错误,则没有结果输出. 是否有一种简单的方法可以同时获得标准错误和标准错误? (除了创建一堆代码;创建两个线程来读取两个输入流,然后使用父流等待它们完成然后将字符串转换回文本?)
有类似的东西会很高兴;
def x = shellDo("ls /tmp/NoFile")
println "out: ${x.out} err:${x.err}"
Run Code Online (Sandbox Code Playgroud) 我正在尝试列出 svn 文件夹的内容,其中包含大约 1200 个项目。沿着“在 groovy 脚本中执行外部程序并捕获输出”中的内容,我开发了以下代码
def svnCommand = "svn list ${repoUrl}"
def sout = new StringBuilder()
def serr = new StringBuilder()
Process sproc = svnCommand.execute()
sproc.consumeProcessOutput(sout, serr)
sproc.waitForProcessOutput()
println sout
Run Code Online (Sandbox Code Playgroud)
如果我要运行此脚本,无论我将初始容量设置多高,我总是会得到截断的输出。输出明显被截断,如以下摘录所示
...
SS0D76I0.cpy
SS0D76M0.cpy
SS0D76N0.cpy
SS
Run Code Online (Sandbox Code Playgroud)
关于捕获命令的完整输出有什么建议吗?该脚本在 Windows 机器上运行。