【问题标题】:Process Builder doesnt accept input through getOutputStreamProcess Builder 不接受通过 getOutputStream 的输入
【发布时间】:2017-06-01 16:50:28
【问题描述】:

我正在尝试使用进程生成器运行 Windows 命令。我不确定为什么它以 1 退出,因为我觉得我给出了正确的输入。如果有人可以查看并指导我可能错在哪里,那就太好了?

   try{
          ProcessBuilder pb = new ProcessBuilder("runas","/noprofile","/user:alex", "cmd");
          Process p = pb.start();
          OutputStream os = p.getOutputStream();
          PrintStream ps = new PrintStream(os);
          ps.println("password");
          ps.flush();

          System.out.println(p.waitFor());
          BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
          String resultLine = in.readLine();
          while (resultLine != null) {
              System.out.println(resultLine);
             resultLine = in.readLine();
          }
      }
           catch (IOException e) {
              e.printStackTrace();
          } 

输出:

1

输入alex的密码:

【问题讨论】:

  • 检查错误流的错误输出
  • 要轻松获取错误流,请将其重定向到带有pb.redirectErrorStream(true) 的标准输出。但是it might not be possible at all... 可能runas 不接受来自标准输入的密码
  • 我也试过这个。没运气。不知道为什么它返回 1 作为退出代码。
  • 某人said here:“密码是从原始控制台设备读取的,根本不通过标准输入”。如果他是对的,那么您根本无法通过这种方式将密码传递给runas
  • 哇。我不知道这是不是真的。我需要一些 windows 命令来使用用户名和密码进行验证。

标签: java windows processbuilder runas


【解决方案1】:

使用它来获取错误

                  System.out.println(p.waitFor());
                  BufferedReader in = new BufferedReader(new InputStreamReader(p.getErrorStream()));
                  String resultLine = in.readLine();
                  while (resultLine != null) {
                      resultLine = in.readLine();
                      System.out.println(resultLine);    
                     }

【讨论】:

  • 如果它运行,我什么也得不到。我刚得到 1 的 p.waitfor()
猜你喜欢
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 2014-09-08
相关资源
最近更新 更多