문제

나는 응용 프로그램 컨트롤러한 프로그램을 침 직접 텍스트/dev/tty.

이것은 생산 응용 프로그램 컨트롤러할 수 있어야 하는 모든 텍스트가 있습니다.일반적으로,이 문제가 되지 않습니다.우리는 단순히 redirect stdout 및 stderr.이 특별한 응용 프로그램을 직접 만드는 호출하는 에코와 리디렉션한 결과는/dev/tty(echo "some text" > /dev/tty).리디렉션을 통해 내 응용 프로그램 컨트롤러에는 실패를 잡는 텍스트입니다.

내가 원한이 응용 프로그램,하지만 위치에 수정할 수 없으며,그것은 더 이상 유지되지.에 대한 아이디어를 잡는 방법 및/또는 던져 출력?

도움이 되었습니까?

해결책

나는 있는지 여부를 결정할 수 없습니다 screen @flolo가 언급 한 프로그램은 필요한 것인지 아닌지를 수행합니다. 그것은 아마도, 나는 당신이 필요한 것인 것으로 보이는 로깅 시설이 내장되어 있는지 확실하지 않습니다.

아마도 당신이 필요로하는 것을 이미 할 수있는 프로그램이있을 것입니다. 나는 지명 할 것이다 sudosh 가능성으로.

직접 작성 해야하는 경우 Pseudo-Tty (Pty)를 사용하고 사용자의 실제 터미널 연결과 PTY 장치 사이에 응용 프로그램 컨트롤러가 있으면 필요한 것을 기록 할 수 있습니다. 로그에. 그것은 사소한 것이 아닙니다. Rochkind 's에서 이것에 대한 정보를 찾을 수 있습니다.고급 유닉스 프로그래밍, 2nd Edn"책, 그리고 의심 할 여지없이 다른 유사한 책 (Unix 환경의 Stevens의 고급 프로그래밍"책은 후보자 일 가능성이 높지만이를 확인할 사본이 없습니다).

다른 팁

 screen -D -m yourEvilProgram

작동해야합니다. 많은 시간을 통과했습니다.

[추가: 두 개의 링크, rackaid 그리고 픽셀 비트, 홈페이지 암소 비슷한 일종의 영양]

고전적인 솔루션을 제어하는 이 같은 응용 프로그램은 , 을 설정하는 의사 터미널,은 로깅,그리고 드라이브 제어 응용 프로그램에서 스크립트입니다.그것의 제비와 함께 제공되는 샘플 그래서 당신은 아마 그냥에 적응하는 하나의 요구에 맞.

이것이 내가 파이썬에서 한 일입니다

import pty, os

pid, fd = pty.fork()
if pid == 0: # In the child process execute another command
    os.execv('./my-progr', [''])
    print "Execv never returns :-)"
else:
    while True:
        try:
            print os.read(fd,65536),
        except OSError:
            break
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top