微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java.lang.Process将errorstream重定向到/ dev / null

我启动了一个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] 举报,一经查实,本站将立刻删除。

相关推荐