2011-07-12 14 views
1

問題はこれです。シェル出力を生成するPythonスクリプトがあります。この出力は次のようになります。Java:BufferedReaderは、Pythonスクリプトから自己更新シェル出力を読み込み、5秒ごとに更新します。

結果:良好です。

[123 SPEED] [456 GOOD] [789 BAD]

最後の行は、それ自体を更新した結果のどちらかになる:良いか結果:悪いライン。その後、最後の行が再び更新され、前の行が消去されます。私はPythonスクリプトでこの動作を無効にする方法を見つけましたが、pythonスクリプトを変更しないで、シェル出力の最後の行だけを正規表現すると良いでしょう。

このJavaコードをその出力で実行すると、必要な結果があればそれが表示されません。

最初の3回は期待どおりにタイマーが実行され、1分間停止して50行の正規表現された出力と間違った出力が出力されます。

最初のブラケット、2番目のブラケット、3番目のブラケットを異なるGUI Swingラベルに出力し、Pythonシェル出力からn秒ごとにこれらのラベルを更新することです。

 try { 
      p = Runtime.getRuntime().exec("myScript.py -Switches"); 
      pReg = Pattern.compile("\\[(.*?)\\]"); 
      ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); 
      exec.scheduleAtFixedRate(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         BufferedReader input = 
          new BufferedReader(new InputStreamReader(p.getInputStream())); 
         if ((line = input.readLine()) != null) { 
          // regex 
          Matcher m = pReg.matcher(line); 
          int h = 0; 
          while(m.find()) { 
           myHashArray[h] = m.group(1); 
           h++; 
           Sytem.out.println(m.group(1)); 
          } 
         } 
        } 
        catch (IOException e1) { 
         System.err.println(e1); 
         System.exit(1); 
        } 
       } 
      }, 0, 500, TimeUnit.MILLISECONDS); 
     } 

     catch (IOException ea) { 
      System.exit(0); 
     } 

答えて

2

BufferedReaderのを使用しないようにしてください - バッファがいっぱいにためBufferedStreamReaderが待っている

をInputStreamReaderのが

をdirectly--使用するか、各括弧内の項目間のpythonプロセス出力の新しいラインを持っていますか、新しい行がJavaプロセスに何かを返す前に

+0

素晴らしい!私はそれを試みます。あなたはそれを達成するための例を持っていますか? – nottinhill

関連する問題