簡體   English   中英

PowerShell腳本卡在ReadLine()上

[英]PowerShell script is stuck on ReadLine()

我有一個執行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()方法並等待腳本響應並編寫標准輸入內容,但是在這種情況下,由於腳本永久卡在ReadLine()上,因此Java代碼將永遠掛起。 然后過了一會兒我有了超時機制,該機制可以終止進程並釋放程序。
在我做的實驗中,我在一開始就將文字復制到outStream上,有時有效,有時無效。 意思是,第二次刷新寫入了流,腳本得到了它。
我必須說,我使用相同的代碼來毫無問題地運行Perl,VB和Python腳本。
此外,此代碼在我的計算機(Windows 10)上運行,而在Windows 7,Windows Server 2008等其他計算機上不運行。也許與PowerShell版本有關?
問題是怎么來的?
我該怎么做才能克服這個問題?
我沒有在PowerShell中成功使用Read-Host命令,並且得到了相同的行為,是否有另一種方法可以在PowerShell腳本中進行讀取?

在我升級到3.0版后,PowerShell 2.0版似乎存在一個錯誤。
我的機器上有5.0版,這就是為什么它可以在我的機器上使用。 在其他無法正常運行的計算機上,有版本2.0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM