Eve*_*ali 2 io groovy process processbuilder
我正在尝试列出 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 机器上运行。
public void consumeProcessOutput(Appendable output, Appendable error):
从进程获取输出和错误流并读取它们,以防止进程因输出缓冲区已满而阻塞。处理后的流数据将附加到提供的 Appendable 中。为此,启动了两个线程,因此该方法将立即返回。即使调用 waitFor(),线程也不会进行 join()。要等待输出被完全消耗,请调用 waitForProcessOutput()。
public void waitForProcessOutput()
从进程获取输出和错误流并读取它们,以防止进程因输出缓冲区已满而阻塞。流数据被丢弃,但避免了由于输出缓冲区已满而造成的阻塞。如果您不关心标准或错误输出,只想让进程静默运行,请使用此方法- 但请小心使用,因为由于流数据被丢弃,因此在出现问题时可能很难追踪。为此,启动了两个线程,但进行了 join(),因此我们等待。正如 waitFor... 名称所暗示的那样,我们也会等待直到完成。最后,关闭输出流和错误流。
public void waitForProcessOutput(Appendable output, Appendable error)
从进程获取输出和错误流并读取它们,以防止进程因输出缓冲区已满而阻塞。处理后的流数据将附加到提供的 Appendable 中。为此,启动了两个线程,但进行了 join(),因此我们等待。正如 waitFor... 名称所暗示的那样,我们也会等待直到完成。最后,关闭输入、输出和错误流。
所以,而不是
sproc.consumeProcessOutput(sout, serr)
sproc.waitForProcessOutput()
Run Code Online (Sandbox Code Playgroud)
称呼
sproc.waitForProcessOutput(sout, serr)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2211 次 |
| 最近记录: |