bash
또는 gnuplot
과 같은 명령 줄 프로그램 용 GUI 인터페이스 프로그램을 쓰고 있는데, 지금은 tlmgr
이라고합니다. 메인 쓰레드가 GUI (scalafx) 꼬 않는 다른 스레드 tlmgr
시작과 연결 표준 입력/표준 출력/열려진 :스칼라 : ProcessIO 독자가 보조 프로그램의 출력을 느슨하게합니다.
val reader = new BufferedReader(new InputStreamReader(stdOut))
을 :
outputFn
val procIO = new ProcessIO(inputFn(_), outputFn(_), errorFn(_))
val processBuilder: ProcessBuilder = Seq("tlmgr", "shell")
process = processBuilder.run(procIO)
및 errorFn
가 ProcessIO
패스 InputStream 인으로부터 BufferedReader
를 사용
outputFn는 기본적으로 루프 출력에 읽고 SyncVar[String]
로두고 않습니다
while (true) {
line = reader.readLine
outputString.put(line)
}
,536,
(좀 더 자세한 내용은 물론).
메인 스레드에서 tlmgr
으로 문자열을 보내고 프롬프트가 다시 나타날 때까지 출력을 읽습니다.
def get_output_till_prompt() = {
...
while (!found) {
result = outputString.take()
if (result == "PROMPT")
found = true
(물론 조금 더 자세한 내용은 물론입니다).
이제는 문제없이 작동하며 여러 가지 방법으로 상호 작용할 수 있습니다. 많은 작업이 원활하게 처리됩니다.
다음이 발생할 때까지 : tlmgr
에 특정 문자열을 보낸 다음 tlmgr
을 내부적으로 수행합니다 (이것은 펄 프로그램 임). 그런 다음 tlmgr
은 다시 외부 프로그램을 호출하여 작업을 수행합니다. 이 tlmgr
이 행복하게 PROMPT
을 다시 출력하면 BUT이 표시되며 이제는 독자가 볼 수 있습니다. 그것은 완전히 벗어난 것으로 보인다.
또한 tlmgr
과의 통신이 엉망이고 아무런 반응이없고 모든 것이 중단됩니다.
이 설정에는 어떤주의 사항이 있습니까?
전체 코드 : 나는 문제를 발견하기 때문에 https://github.com/TeX-Live/tlcockpit