2012-06-09 5 views

답변

2

시도 JPty 또는 pty4j. 이것은 JNA를 사용하는 Java 용 pty 구현입니다.

2

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에서 아파치 유틸리티 아이디어를 얻었습니다.

+1

실제로 Java 표준 라이브러리에는 PTY 지원이 없습니다. 정말로 필요한 경우 (프로세스를 실행하고 스트림을 통해 stdin 및 stdout에 연결하는 것과 달리 Java 프로세스 객체가 사용자에게 제공함) 네이티브 코드를 통과해야합니다. https://github.com/now/screenterm의 screenterm 프로젝트는 terminator.terminal.pty 패키지에서이를 지원합니다. –

+0

stdin과 stdout에 연결하는 것이 좋은 지적입니다. 자바 버전은 PTY에 비해 약간의 통증/장황함이 있습니다. – Noah

+0

명령 출력을 얻으려고하면 빈 결과가납니다. 루비 또는 파이썬에서는 완벽하게 작동합니다. –

관련 문제