【问题标题】:Missing command line output from Java process in WindowsWindows 中 Java 进程缺少命令行输出
【发布时间】: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 中。

【问题讨论】:

标签: java process stream command


【解决方案1】:

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

【讨论】:

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