我启动了一个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个 – 创建一个读取错误流的线程 – 可能是最好的.
编写自己的解析器将是一项相当大的工作量,并且将成为不必要的错误来源.使用包装器脚本会产生额外的不必要的依赖关系,即另一个潜在的问题来源.当你已经有一个只有几行简单代码的解决方案时,我不会看到使用新库.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。