Python 프로그램의 출력을 /dev/null로 리디렉션

Python 프로그램의 출력을 /dev/null로 리디렉션

다른 사람이 작성하고 컴파일한 Python 실행 파일이 있는데, 내 bash 스크립트 중간에 한 번만 실행하면 됩니다. 프로그램은 텍스트 기반 UI를 사용하므로 계속 진행하기 전에 입력을 기다립니다. 하지만 시작할 때 수행하는 주요 작업은 내 bash 스크립트에 필요합니다. 나는 지저분하고 이상한 절차를 알고 있지만 불행히도 다른 옵션이 없습니다.

종료 신호를 사용하여 프로그램을 강제로 닫았지만 프로그램의 TUI는 실행되는 모든 위치로 출력을 요구합니다. 나는 stdout과 stderr을 모두 /dev/null로 리디렉션하고 앰퍼샌드 접미사를 붙여 백그라운드에서 프로그램을 실행하려고 시도했지만 단순히 공을 재생할 수는 없습니다. 원인은 프로그램이 다른 프로세스를 생성하고 상위 프로세스의 출력 리디렉션이 해당 프로세스에 영향을 미치지 않기 때문이라고 생각합니다. 하위 프로세스의 모든 출력을 리디렉션하는 데 활용할 수 있는 방법이 있습니까?

답변1

프로그램이 stdout 대신 tty에 쓰고 있을 수 있습니다. unbuffer 함께 제공되는 스크립트를 사용할 수 있습니다.expectexpect또는 이와 유사한 것을 사용하는 다른 기술 .

여기 데모가 있습니다. 이 스크립트를 만들고 "writetty"라고 부릅니다. 그런 다음 다음을 수행하십시오 chmod u+x writetty.

#!/bin/bash
date > /dev/tty

이제 시도해 보세요:

$ ./writetty
Tue Jun  8 12:24:36 CDT 2010
$ ./writetty > /dev/null
Tue Jun  8 12:24:46 CDT 2010
$ var=$(./writetty)
Tue Jun  8 12:24:56 CDT 2010
$ unbuffer ./writetty > /tmp/writetty.out
$ cat /tmp/writetty.out
Tue Jun  8 12:25:06 CDT 2010
$ var=$(unbuffer ./writetty)
$ echo $var
Tue Jun  8 12:25:16 CDT 2010

expect프로그램을 종료하는 대신 프로그램의 입력 요청에 응답하는 데 사용할 수 있습니다 .

관련 정보