콘솔 리디렉션을 사용하여 화면 밖에서 스크립트를 실행할 때 로그 파일이 출력되지 않습니다(티)

콘솔 리디렉션을 사용하여 화면 밖에서 스크립트를 실행할 때 로그 파일이 출력되지 않습니다(티)

콘솔에 일반 로깅을 작성하는 Python 스크립트가 있습니다. 나는 일반적인 python -u jbot.py | tee -a jbot.log. 그러나 화면 밖에서 실행하려고 하면 다음과 같습니다.

screen python -u jbot.py | tee -a jbot.log

내 파일에 로그 출력이 수신되지 않습니다. 연결을 끊으면 screen세션의 콘솔 출력이 완전히 억제됩니까, 아니면 스크립트의 stdout 및 stderr에서 로그 파일에 대한 입력을 계속 얻을 수 있는 방법이 있습니까?

나는 로깅 라이브러리를 사용하면 이 문제를 해결할 수 있다는 것을 알고 있지만(어쨌든 필터링을 할 것이기 때문에) 지금은 로깅 모듈을 내 코드에 적절하게 통합할 수 있을 때까지 콘솔 출력 캡처(가능한 경우)를 고수하고 싶습니다.

답변1

다음과 같이 해야 합니다.

screen sh -c 'python -u jbot.py | tee -a jbot.log'

기본적으로 화면 출력(직접 Python 스크립트가 아님)을 로그에 파이프하기 전에. Screen은 실행될 명령을 인수로 받아들이고 쉘 자체를 사용하지 않습니다. 따라서 쉘을 실행하도록 명시적으로 지시해야 합니다.

또 다른 옵션은 화면에 내장된 출력 로깅을 사용하는 것입니다. 해당 -L옵션을 확인하세요(화면 UI를 통해 화면 내에서도 사용할 수 있음).

관련 정보