問題はこれです。シェル出力を生成する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);
}
素晴らしい!私はそれを試みます。あなたはそれを達成するための例を持っていますか? – nottinhill