java process 重定向_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个 – 创建一个读取错误流的线程 – 可能是最好的.

编写自己的解析器将是一项相当大的工作量,并且将成为不必要的错误来源.使用包装器脚本会产生额外的不必要的依赖关系,即另一个潜在的问题来源.当你已经有一个只有几行简单代码的解决方案时,我不会看到使用新库.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值