0

我尝试从 java 中执行 windows 进程(在这种特殊情况下为 cmd.exe)并偶然发现了一个问题。对命令没有反应net statistics server(对其他命令也没有反应)。

我在 SO 上看到的示例使用他们需要的所有参数创建了该过程。但我想直接写入进程的输出流。那么我该怎么做呢?我究竟做错了什么?

public class CmdExecutor
{

  public static void main(String[] args)
  {
    ProcessBuilder pb = new ProcessBuilder("cmd");
    pb.directory(new File("/"));
    Process p = null;
    try
    {
      p = pb.start();
    }
    catch (IOException e)
    {
      System.out.println(e.getMessage());
    }

    if (p != null)
    {
      Scanner s = new Scanner(p.getInputStream());
      PrintWriter out = new PrintWriter(p.getOutputStream());

      boolean commandSent = false;

      while (s.hasNext())
      {
        System.out.println(s.nextLine());
        if (!commandSent)
        {
          out.println("net statistics server");
          commandSent = true;
        }
      }
    }
  }
}

唯一的输出是:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.
4

1 回答 1

3

PrintWriterOutputStream在缓冲区已满之前不会向 写入数据。您可以手动冲洗

out.flush();

或者使用使用autoflush的构造函数

PrintWriter out = new PrintWriter(p.getOutputStream(), true);
于 2013-09-03T12:42:50.820 回答