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

在Java 6中使用继承的stdin / stdout / stderr启动进程

呼延曜灿
2023-03-14
问题内容

如果我通过Java的ProcessBuilder类启动流程,则可以完全访问该html" target="_blank">流程的标准输入,标准输出和标准错误流(如Java
InputStreams和)OutputStreams。不过,我不能找到一种方法,这些流无缝连接System.inSystem.outSystem.err

可以用来redirectErrorStream()获取InputStream包含子流程的标准输出和标准错误的单个文件,然后循环遍历并通过我的标准输出将其发送出去,但是我找不到一种方法可以让用户输入到流程中,如果我使用C
system()调用,他或她可以。

Java SE 7发行时似乎有可能实现-
我只是想知道现在是否有解决方法。如果isatty()子进程中的结果进行了重定向,则奖励积分。


问题答案:

您将需要将Process输出,err和输入流复制到System版本。最简单的方法是使用Commons
IO包中的IOUtils类。该复制方法看起来是你需要的。复制方法调用将需要在单独的线程中。

这是基本代码:

// Assume you already have a processBuilder all configured and ready to go
final Process process = processBuilder.start();
new Thread(new Runnable() {public void run() {
  IOUtils.copy(process.getOutputStream(), System.out);
} } ).start();
new Thread(new Runnable() {public void run() {
  IOUtils.copy(process.getErrorStream(), System.err);
} } ).start();
new Thread(new Runnable() {public void run() {
  IOUtils.copy(System.in, process.getInputStream());
} } ).start();


 类似资料:
  • 问题内容: 在shell中,您可以执行重定向 等操作,但是启动程序后如何呢? 这就是我问这个问题的方式,在我的终端后台运行的程序不断输出令人讨厌的文本。这是一个重要的过程,因此我必须打开另一个shell以避免输入文本。我希望能够进行重定向或其他重定向,以便可以继续在同一外壳中工作。 问题答案: 除非关闭并重新打开您的tty(即注销并重新登录,这可能还会终止该过程中的某些后台进程),否则您只剩下一个

  • 我有一个程序,通过Pipe. SourceChannel将stdout、stderr和stdin传输到/从Bytes Buffers。 程序使用选择器注册每个通道。 循环中的程序定期遍历 selectedKeys 集中的每个键,这些键对应于 stdout、stderr 和 stdin。对于每个密钥,它确定密钥是否有效、可读或可写,如果是,则与 ByteBuffer 执行相应的 IO 操作 我的问题

  • 问题内容: 我对这三个文件的目的感到困惑。如果我的理解是正确的,则是程序在其中写入其在进程中运行任务的请求的文件,是内核在其中写入其输出以及请求其从中访问信息的进程的文件,并且是该文件。输入所有例外。在打开这些文件以检查它们是否确实发生时,我似乎没有任何暗示! 我想知道的是这些文件的用途到底是什么,用很少的技术术语就可以完全肯定答案! 问题答案: 标准输入 -这是您的过程读取以获取您的信息的 文件

  • 在 Linux 中,一切都只是文件。这意味着,对于控制台程序: 键盘表示为一个文件,Bash 从中读取你的输入。 显示器表示为一个文件,Bash向输出写入它。 让我们假设,你有一个程序可以计算文件中的行。你可以通过键入wc -l来调用它。现在尝试一下 没有发生什么事吧?它只是卡在那里。错了,它正在等待你的输入。这是它的工作原理: line_counter = 0 while end of file

  • 问题内容: 我想捕获并显示通过Python的子流程调用的流程的输出。 我以为我可以将文件状对象作为参数stdout和stderr传递 我可以看到它访问了属性-因此它正在处理对象。但是,永远不会调用该方法。我的方法是否完全无效或我只是缺少什么? 更新: 我还想工作的是ANSI控制字符,用于移动光标并覆盖以前的输出内容。我不知道这是否是正确的术语,但这是我的意思的一个示例:我正在尝试使一些GIT自动化

  • 我试图与一个进程通信(该进程本身会写入stdin和stdout,以便在终端中与用户交互),并在C中读取它的stdin和写入它的stdout。 因此,我尝试以编程方式替换shell用户。一个methapohrical示例:假设出于某种原因我想在C中使用VIM。然后我还需要编写命令(stdout)并从编辑器(stdin)中读取内容。 起初我认为这可能是一项微不足道的任务,但似乎没有标准的方法<代码>i