Python 스크립트가 있습니다. 터미널에 무언가를 출력하는 동안 결과를 저장하고 싶습니다. 나는 노력했다
python program.py 2>&1 | tee output.txt
그러나 프로그램이 완료된 후에야 화면에 모든 내용이 인쇄되는 것 같습니다. 실행 중에는 출력이 없습니다. 프로그램을 실행하면서 진행상황을 알고 싶어서 정말 귀찮습니다. 화면과 파일을 동시에 출력하는 방법이 있나요?
2019년 11월 13일 업데이트
@egmont의 도움에 감사드립니다. 동일한 문제가 발생한 사람은 누구나 다음 명령을 시도해 볼 수 있습니다. 화면에 출력되는 동시에 파일에 기록됩니다.
stdbuf -oL python program.py 2>&1 | tee ouput.txt
답변1
나는 동일한 문제 ( 백그라운드 ( ) 또는 리디렉션과 stdout
같은 조작과 관련된 "모든 것" )를 경험했습니다. 흥미롭게도 문제가 해결되지 않았습니다. 그러나 Python 2와 3(전복 버전은 모르겠습니다. 죄송합니다.)은 make 및 unbuffered 옵션을 지원하는 것으로 나타났습니다. 보다nohup
&
stdbuf -oL
-u
stdout
stderr
https://www.commandlinux.com/man-page/man1/python2.7.1.html.
방금 (해당 매뉴얼 페이지에 따르면) Python 2.7에서도 stdin
버퍼링이 해제된 반면 Python 3(나의 경우 3.10)의 매뉴얼 페이지에서는 구체적으로 다음과 같이 명시되어 있습니다."This option has no effect on the stdin stream."
따라서 OP의 원래 명령은 다음과 같습니다.
python -u program.py 2>&1 | tee output.txt
그런 다음 PHP / awk / 등에서 기대할 수 있는 동작을 얻습니다.
OP가 "화면과 파일을 동시에 출력할 수 있는 방법이 있습니까?"라고 물었을 때 이 "솔루션"은 tee
OP가 이미 추론한 내용에 의존합니다. 단지 python -u
보다 친숙한 동작을 제공하기만 하면 됩니다.