Windows中Java进程缺少命令行输出

Windows中Java进程缺少命令行输出,java,process,stream,command,Java,Process,Stream,Command,我有一些使用JavaApacheExec类来运行外部进程的简单代码 Executor ex = new DefaultExecutor(); ex.setStreamHandler(new PumpStreamHandler(System.out, System.out, System.in)); CommandLine cl = new CommandLine( "C:\\program.exe"); ex.execute(cl); } 对于某些命令行程序,

我有一些使用JavaApacheExec类来运行外部进程的简单代码

  Executor ex = new DefaultExecutor();
  ex.setStreamHandler(new PumpStreamHandler(System.out, System.out, System.in));
  CommandLine cl = new CommandLine(
     "C:\\program.exe");

     ex.execute(cl);
}

对于某些命令行程序,这会按预期工作,并将程序的所有输出输入到输出流中,同时将我自己的文本输入到输入流中。然而,对于其他程序,进程的输出是可见的,可以从命令行手动运行,但是当我通过java进程运行时,我没有得到任何信息

我希望最终写入stdin并在代码本身中检索和分析stdout

如果有我不知道的原因,为什么有些程序似乎在命令行上输出文本,但当我将它们作为java进程运行时,我没有通过流接收任何内容


这在Windows中发生。

进程外代码将不会转到同一命令行输出,除非您显式配置它。另外,一般来说,使用log4j之类的日志库比使用println语句更好。

进程外代码不会转到同一命令行输出,除非您明确配置它。另外,一般来说,使用log4j之类的日志库比使用println语句更好。

我希望最终能够在java代码中写入进程stdin并从其stdout读取,在提示时模仿人。有了这个限制,这可能吗?你可以,但这很烦人。在Process类中使用getOutputStream/getInputStream进行配置。但我已经读到,如果你在外部进程本身中这样做,它可能会产生死锁。显然,您可以在另一个进程中进行配置。或者,您似乎可以使用ProcessBuilder重定向i/o流:我可能有误解。但是在我的代码中,我将System.out和in-Streams传递到PumpStreamHandler构造函数中,我相信这是一个Apache exec类,它在内部完成了流的处理。我的问题是,对于一些外部程序,包括我自己编写的伪程序,我可以成功地检索所有输出,而其他一些外部程序给我空白输出,即使在windows cmd行,我希望最终能够在java代码中编写进程stdin并从其stdout中读取,在提示时模仿人。有了这个限制,这可能吗?你可以,但这很烦人。在Process类中使用getOutputStream/getInputStream进行配置。但我已经读到,如果你在外部进程本身中这样做,它可能会产生死锁。显然,您可以在另一个进程中进行配置。或者,您似乎可以使用ProcessBuilder重定向i/o流:我可能有误解。但是在我的代码中,我将System.out和in-Streams传递到PumpStreamHandler构造函数中,我相信这是一个Apache exec类,它在内部完成了流的处理。我的问题是,对于一些外部程序,包括我自己编写的虚拟程序,我可以成功地检索所有输出,但是一些其他外部程序会给我空白输出,即使在windows cmd行,它们输出正确。可能你有这个问题的问题:可能你有这个问题的问题: