【问题标题】:PowerShell script is stuck on ReadLine()PowerShell 脚本卡在 ReadLine()
【发布时间】:2016-10-26 06:16:49
【问题描述】:

我有一个执行 PowerShell 脚本的 java 应用程序。
在我的 java 代码中,我从输入流(来自脚本的数据)读取并写入输出流(进入脚本的数据)。我还单独处理错误流。
在 PowerShell 脚本中,我使用以下命令从脚本的标准输入流中读取数据:

$Line = [Console]::ReadLine()

当脚本到达代码中的这一点时,它会挂在 ReadLine() 上,直到将某些内容写入流中,这就是 java 应用程序的作用所在。
在 java 中,我将以下内容写入输出流 (这段代码不是完整的代码,而是一般的,只是其中的重要部分):

public void runMain()
{
   String[] params = "the command and arguments here";
   Process process = r.exec(params, null);
   outStream = new BufferedOutputStream(process.getOutputStream());
   inStream  = new BufferedInputStream(process.getInputStream());
   errStream = new BufferedInputStream(process.getErrorStream());

   startCmd     = "some text here\r\n";
   wtByte       = startCmd.getBytes();
   outStream.write(wtByte, 0, wtByte.length);
   outStream.flush();

   while (!isScriptTerminated && !wasError && !isScriptFinished)
   {
       if (errStream != null)
       {
           // handle error
       }

       if (inStream != null)
       {
           // read the data from the STDOUT of the script (our input)
           readBuffer = receive();
           ...
       }
       ...
   }
}

您是否可以看到我在开始时正在写入 outStream,然后我调用 flush() 以实际将所有内容刷新到流中,但此时脚本被卡住并挂在 ReadLine() 和我的 java 代码到达 receive() 方法并等待脚本响应并编写一些标准输入,但在这种情况下,java 代码将永远挂起,因为脚本永远卡在 ReadLine() 上。然后过了一会儿,我有超时机制来终止进程并释放程序。
在我做的实验中,我一开始就复制了对 outStream 的写入,它有时有效,有时无效。意思是,第二次刷新写入流并且脚本得到了它。
我必须说我使用相同的代码来运行 Perl、VB 和 Python 脚本没有问题。
此外,此代码在我的机器(Windows 10)上运行,而在 Windows 7、Windows Server 2008 等其他机器上运行不正常。也许它与 PowerShell 版本有关?
问题是怎么来的?
我该怎么做才能克服这个问题?
我没有成功在 PowerShell 中使用 Read-Host 命令并且我得到了相同的行为,是否有另一种方法可以在 PowerShell 脚本中读取?

【问题讨论】:

    标签: java powershell


    【解决方案1】:

    PowerShell 2.0 版似乎有一个错误,一旦我升级到 3.0 版,它就可以工作了。
    在我的机器上有 5.0 版,这就是它在我的机器上工作的原因。在其他无法运行的机器上,有 2.0 版。

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 2021-06-30
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      相关资源
      最近更新 更多