无法捕获 groovy 执行的完整输出
Unable to capture full output from groovy execute
我正在尝试列出包含大约 1200 项的 svn 文件夹的内容。按照“”中的思路,我开发了以下代码
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
如果我要 运行 这个脚本,我总是会得到一个 t运行 的输出,无论我可以设置多高的初始容量。输出显然是 t运行cated,如下面的摘录
所示
...
SS0D76I0.cpy
SS0D76M0.cpy
SS0D76N0.cpy
SS
关于捕获命令的完整输出有什么建议吗?该脚本在 Windows 框上 运行ning。
public void consumeProcessOutput(Appendable output, Appendable error)
:
从进程获取输出和错误流并读取它们以防止进程因输出缓冲区已满而阻塞。处理后的流数据附加到提供的 Appendable 中。为此,启动了两个线程,因此该方法将立即 return 。 即使调用了 waitFor(),线程也不会被 join()。要等待输出被完全消耗调用 waitForProcessOutput()。
public void waitForProcessOutput()
从进程获取输出和错误流并读取它们以防止进程因输出缓冲区已满而阻塞。流数据被丢弃,但避免了由于输出缓冲区已满而导致的阻塞。 如果您不关心标准或错误输出并且只是希望进程运行静默,请使用此方法 - 但是请谨慎使用,因为流数据已被丢弃,当出现问题时可能很难追踪。为此,启动了两个线程,但是 join()ed,所以我们等待。正如 waitFor... 名称所暗示的,我们也等到完成。最后,关闭输出流和错误流。
public void waitForProcessOutput(Appendable output, Appendable error)
从进程获取输出和错误流并读取它们以防止进程因输出缓冲区已满而阻塞。处理后的流数据附加到提供的 Appendable 中。为此,启动了两个线程,但是 join()ed,所以我们等待。正如 waitFor... 名称所暗示的,我们也等到完成。最后关闭输入流、输出流和错误流。
所以,而不是
sproc.consumeProcessOutput(sout, serr)
sproc.waitForProcessOutput()
通话
sproc.waitForProcessOutput(sout, serr)
我正在尝试列出包含大约 1200 项的 svn 文件夹的内容。按照“
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
如果我要 运行 这个脚本,我总是会得到一个 t运行 的输出,无论我可以设置多高的初始容量。输出显然是 t运行cated,如下面的摘录
所示...
SS0D76I0.cpy
SS0D76M0.cpy
SS0D76N0.cpy
SS
关于捕获命令的完整输出有什么建议吗?该脚本在 Windows 框上 运行ning。
public void consumeProcessOutput(Appendable output, Appendable error)
:
从进程获取输出和错误流并读取它们以防止进程因输出缓冲区已满而阻塞。处理后的流数据附加到提供的 Appendable 中。为此,启动了两个线程,因此该方法将立即 return 。 即使调用了 waitFor(),线程也不会被 join()。要等待输出被完全消耗调用 waitForProcessOutput()。
public void waitForProcessOutput()
从进程获取输出和错误流并读取它们以防止进程因输出缓冲区已满而阻塞。流数据被丢弃,但避免了由于输出缓冲区已满而导致的阻塞。 如果您不关心标准或错误输出并且只是希望进程运行静默,请使用此方法 - 但是请谨慎使用,因为流数据已被丢弃,当出现问题时可能很难追踪。为此,启动了两个线程,但是 join()ed,所以我们等待。正如 waitFor... 名称所暗示的,我们也等到完成。最后,关闭输出流和错误流。
public void waitForProcessOutput(Appendable output, Appendable error)
从进程获取输出和错误流并读取它们以防止进程因输出缓冲区已满而阻塞。处理后的流数据附加到提供的 Appendable 中。为此,启动了两个线程,但是 join()ed,所以我们等待。正如 waitFor... 名称所暗示的,我们也等到完成。最后关闭输入流、输出流和错误流。
所以,而不是
sproc.consumeProcessOutput(sout, serr)
sproc.waitForProcessOutput()
通话
sproc.waitForProcessOutput(sout, serr)