bash
またはgnuplot
のように、コマンドラインプログラム用のGUIインターフェイスプログラムをtlmgr
と書いています。メインスレッドは、GUI(scalafx)ブツを行い、別のスレッドがtlmgr
を開始し、標準入力/標準出力/標準エラー接続:Scala:ProcessIOリーダが補助プログラムの出力を緩める
val procIO = new ProcessIO(inputFn(_), outputFn(_), errorFn(_))
val processBuilder: ProcessBuilder = Seq("tlmgr", "shell")
process = processBuilder.run(procIO)
outputFn
、そしてerrorFn
ProcessIO
に渡す入力ストリームからBufferedReader
を使用:
val reader = new BufferedReader(new InputStreamReader(stdOut))
outputFnは、基本的にループして出力を読み取り、SyncVar[String]
にそれを置くん
while (true) {
line = reader.readLine
outputString.put(line)
}
(もう少し詳しく)。
メインスレッドから、tlmgr
に文字列を送信し、プロンプトが再び表示されるまで出力を読み取ります。
def get_output_till_prompt() = {
...
while (!found) {
result = outputString.take()
if (result == "PROMPT")
found = true
(もちろん、もう少し詳しく)。
これは問題なく動作し、さまざまなやり方で対話できます。多くのことが円滑に行われます。
tlmgr
に特定の文字列を送信した後、tlmgr
は内部的にいくつかのことを行います(それはperlプログラムです)。次にtlmgr
が順番に外部プログラムを呼び出して何らかの作業を行います。このtlmgr
の後にもう一度PROMPT
を出力すると、BUTになりました。それは完全にオフに失われているようだ。
さらに、tlmgr
との通信はボトムになり、反応がなくなり、すべてがハングします。
この設定には警告がありますか?
全コード:https://github.com/TeX-Live/tlcockpit