当前位置: 首页 > 面试题库 >

使用StreamGobbler处理输入

景元徽
2023-03-14
问题内容

我已经通过以下网址访问了StreamGobbler

JavaWorld:Stream
Gobbler

我了解用法及其实施原因。但是,所涵盖的方案仅是那些可能存在命令/处理错误的输出的方案。

我找不到任何使用StreamGobbler来处理输入的情况。例如,在中mailx,我必须指定电子邮件的正文,并按照以下格式进行操作

Process proc = Runtime.getRuntime().exec(cmd);
OutputStreamWriter osw = new OutputStreamWriter(proc.getOutputStream());
osw.write(mailBody);
osw.close();

如何通过StreamGobbler处理此问题,或者不需要通过它进行处理。


问题答案:

理想情况下,StreamGobbler如果您已经对进行了预期InputStream,则可以在错误流中使用on(在单独的线程中),以调查何时process.waitFor()返回非零值以查找错误消息。如果您对没兴趣InputStream,则在向命令提供输入后即可直接在代码中读取ErrorStream。

Process proc = Runtime.getRuntime().exec(cmd)
// Start a stream gobbler to read the error stream.
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream());
errorGobbler.start();

OutputStreamWriter osw = new OutputStreamWriter(proc.getOutputStream())
osw.write(mailBody)
osw.close();

int exitStatus = proc.waitFor();
if (0 != exitStatus) {
    /*
     * If you had not used a StreamGobbler to read the errorStream, you wouldn't have
     * had a chance to know what went wrong with this command execution.
     */
    LOG.warn("Error while sending email: " + errorGobbler.getContent());
}


 类似资料:
  • 我发现有几种方法可以用钩子处理用户的文本输入。用钩子处理输入的更好或更合适的方法是什么?你会用哪一种? 1)处理输入的最简单的钩子,但是你有更多的字段,你必须写更多重复的代码。 活动: 2) 与上面的示例类似,但具有动态键名 活动: 3) 作为的替代方案,正如ReactJS文档中所述,通常比更可取。 活动: 4) 将返回一个回调的备忘录版本,该版本仅在其中一个依赖项发生更改时才会更改。 活动:

  • 我正在尝试通过单行输入检索用户输入:例如,使用扫描仪分隔符为Comma5,6,4,8,9。如何使用这种类型的输入检索任意数量的整数?也就是说,不必询问用户希望输入多少个整数。下面是我一直在使用的代码,但是当我想中断时,不能中断while循环。请注意,我保留System.Out以跟踪程序当前运行的位置。令人困惑的是,我可以以这种格式获得用户输入,但程序停止并再次要求用户输入,然后如果输入是一个整数,

  • 问题内容: 我有一些Python代码可以执行一个外部应用程序,当该应用程序的输出量很少时,它可以很好地运行,但是在有大量输出时,它会挂起。我的代码如下: 文档中有一些注释似乎表明了潜在的问题。等待中,有: 警告:如果子进程向或管道生成足够的输出,从而阻塞等待OS管道缓冲区接受更多数据的输出,则将死锁。使用避免这种情况。 尽管进行了交流,但我发现: 注意读取的数据缓存在内存中,因此,如果数据大小很大

  • 为了让用户和你的应用进行交互,我们可以用v-on指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法: <div id="app-5"> <p>{{ message }}</p> <button v-on:click="reverseMessage">逆转消息</button> </div> var app5 = new Vue({ el: '#app-5', dat

  • 主要内容:重定向输出(Stdout和Stderr),抑制程序输出有三个键盘输入的通用“文件”,在屏幕上打印文本和在屏幕上打印错误。 标准输入文件(stdin)包含程序/脚本的输入。 标准输出(Standard Out)文件(stdout)被用来写输出以显示在屏幕上。 最后一种叫作的“标准错误”文件包含用于显示在屏幕上的任何错误消息。 这三个标准文件中的每一个(也称为标准流)分别使用数字,和进行引用。Stdin是文件,stdout是文件,stderr是文件。 重

  • 我有一个简单的java程序,接受3个用户输入类型的整数,双和字符串。我想知道对所有这些输入执行错误处理的最佳/最有效的方法,以保持程序运行,通知用户他们输入了一个错误的输入,并再次问他们这个问题。任何帮助都将不胜感激。 这是我的代码