내가 가진 :스칼라에서 PTY로 프로세스를 생성하는 방법은 무엇입니까? 루비에서
PTY.spawn("/usr/bin/lxc-monitor -n .+") do |i, o, pid|
# ...
end
방법 스칼라/자바에서이 작업을 수행?
내가 가진 :스칼라에서 PTY로 프로세스를 생성하는 방법은 무엇입니까? 루비에서
PTY.spawn("/usr/bin/lxc-monitor -n .+") do |i, o, pid|
# ...
end
방법 스칼라/자바에서이 작업을 수행?
PTY가 java/scala로 포팅 된 것으로 생각하지 않습니다. Java의 내장 런타임을 사용할 수 있습니다.
def run() {
val rt = Runtime.getRuntime
val cmds = Array("/usr/bin/lxc-monitor", "-n .+")
val env = Array("TERM=VT100")
val p1 = rt.exec(cmds, env)
}
저는 this 페이지를 스칼라 버전의 기본으로 사용했습니다.
UPDATE :
당신이 입력 스트림을 얻고 그것을 읽을 필요가 출력을 얻으려면 (I이 거꾸로 소리를 알고 있지만 그것은 JVM에 입력 상대적이다). 아래 예제는 아파치 공유를 사용하여 java의 일부 자세한 내용을 건너 뜁니다.
import java.io.StringWriter
import org.apache.commons.io.IOUtils
class runner {
def run() {
val rt = Runtime.getRuntime
val cmds = Array("/usr/bin/lxc-monitor", "-n .+")
val env = Array("TERM=VT100")
val p1 = rt.exec(cmds, env)
val inputStream = p1.getInputStream
val writer = new StringWriter()
IOUtils.copy(inputStream, writer, "UTF-8")
val output = writer.toString()
println(output)
}
}
저는 here에서 아파치 유틸리티 아이디어를 얻었습니다.
실제로 Java 표준 라이브러리에는 PTY 지원이 없습니다. 정말로 필요한 경우 (프로세스를 실행하고 스트림을 통해 stdin 및 stdout에 연결하는 것과 달리 Java 프로세스 객체가 사용자에게 제공함) 네이티브 코드를 통과해야합니다. https://github.com/now/screenterm의 screenterm 프로젝트는 terminator.terminal.pty 패키지에서이를 지원합니다. –
stdin과 stdout에 연결하는 것이 좋은 지적입니다. 자바 버전은 PTY에 비해 약간의 통증/장황함이 있습니다. – Noah
명령 출력을 얻으려고하면 빈 결과가납니다. 루비 또는 파이썬에서는 완벽하게 작동합니다. –