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

Posted

技术标签:

【中文标题】Windows 中 Java 进程缺少命令行输出【英文标题】:Missing command line output from Java process in Windows 【发布时间】:2012-04-17 03:50:09 【问题描述】:

我有一些使用 Java apache exec 类来运行外部进程的简单代码。

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

     ex.execute(cl);

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

我希望最终写入标准输入并在代码本身中检索和分析标准输出。

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

这发生在 Windows 中。

【问题讨论】:

也许你有这个问题的问题:***.com/questions/27249101/… 【参考方案1】:

进程外代码不会转到相同的命令行输出,除非您明确配置它这样做。此外,作为一般规则,使用 log4j 之类的日志库比使用 println 语句更好。

【讨论】:

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

以上是关于Windows 中 Java 进程缺少命令行输出的主要内容,如果未能解决你的问题,请参考以下文章

使用jps查看JVM进程信息

Windows批处理 调用程序后 不等待子进程 父进程继续执行命令

windows和Linux程序读取命令输出信息

使用/不使用 cmd.exe 执行 Java 子进程命令行

Windows中使用命令行杀进程

Windows中使用命令行杀进程