我启动了一个Process(通过
java.lang.Runtime #exec,在
Java 6,
Linux上),我只需要stdout.不幸的是,我运行的程序(ffmpeg)坚持用进度信息搞乱stderr.如果我不时地从stderr读取,stderr缓冲区会填满,过程会暂停一段时间.
基本上我想要的是丢弃stderr的任何输出.我的建议
1)
ffmpeg -i .... .... 2>/dev/null
这有效,但意味着我必须执行exec(String)而不是exec(String []),这意味着我必须转义我的参数,因为Java中没有标准函数.我可以建立一个,但不喜欢.
2)
在包装器脚本中使用上面的ffmpeg命令,将输出重定向到/ dev / null.听起来不错,但仅仅为此而拥有一个bash脚本似乎有点矫枉过正.
3)
同时附加ErrorStream,启动一个除了errorstream上的read()之外什么都不做的线程.会工作,但看起来凌乱….
4)
使用Apache Commons Exec …我甚至没有查看文档以查看它是否可行,但是为了这么简单的任务而导入整个库也感觉不对.
所以基本上我的问题是:有更好的方法吗?如果没有,你认为哪一个[打击]最美丽[/ strike]最难看?
最佳答案 在这些选项中,第3个 – 创建一个读取错误流的线程 – 可能是最好的.
编写自己的解析器将是一项相当大的工作量,并且将成为不必要的错误来源.使用包装器脚本会产生额外的不必要的依赖关系,即另一个潜在的问题来源.当你已经有一个只有几行简单代码的解决方案时,我不会看到使用新库.