gpt4 book ai didi

java.lang.Process 将错误流重定向到/dev/null

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:25 27 4
gpt4 key购买 nike

我启动了一个进程(通过 java.lang.Runtime#exec,在 Java 6,Linux 上),我只需要 stdout。不幸的是,我运行的程序 (ffmpeg) 坚持使用进度信息将 stderr 弄乱。如果我不时不时地从 stderr 中读取,stderr 缓冲区就会填满,并且进程会在一段时间后停止......

基本上我想要的是丢弃来自 stderr 的任何输出。我的建议

1)

ffmpeg -i .... .... 2>/dev/null

这行得通,但意味着我必须执行 exec(String) 而不是 exec(String[]),这意味着我必须转义我的参数,Java 中没有为此提供标准函数。我可以 build 一个,但我不想 build 。

2)

在包装器脚本中使用上述 ffmpeg 命令,将输出重定向到/dev/null。听起来不错,但是仅仅为此使用一个 bash 脚本似乎有些过分了。

3)

同时附加 ErrorStream,启动一个线程,该线程只对错误流执行 read() 操作。会工作,但看起来很乱....

4)使用 Apache Commons Exec ...我什至没有检查文档看这是否可行,但是仅仅为了这样一个简单的任务而导入整个库也感觉不对。

所以基本上我的问题是:有没有更好的方法来做到这一点?如果不是,您认为哪个是[strike]最漂亮[/strike]最不丑陋的?

最佳答案

在这些选项中,数字 3 - 创建一个线程来读取错误流 - 可能是最好的。

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

关于java.lang.Process 将错误流重定向到/dev/null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9837895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com