경우 하나가 진정으로 데이터를 원했다, 나는 부착 좋을 것 gdb를 호출, 파이썬 인터프리터에 디버거를 잠시 작업을 중단 fsync(1)
( 표준 출력 (과정을 다시 시작) 그것에서) 분리 및 출력 파일 정독 이동합니다.
에서 봐 /proc/$(pidof python)/fd
유효한 파일 기술자를 볼 수 있습니다. $(pidof x)
' x
' 프로세스의 PID를 반환합니다 .
# your python script is running merrily over there.... with some PID you've determined.
#
# load gdb
gdb
#
# attach to python interpreter (use the number returned by $(pidof python))
attach 1234
#
# force a sync within the program's world (1 = stdout, which is redirected in your example)
call fsync(1)
#
# the call SHOULD have returned 0x0, sync successful. If you get 0xffffffff (-1), perhaps that wasn't stdout. 0=stdin, 1=stdout, 2=stderr
#
# remove our claws from poor python
detach
#
# we're done!
quit
이 방법을 사용하여 작업 디렉토리를 변경하고 설정을 즉시 조정할 수 있습니다 ... 많은 것들. 아아, 실행중인 프로그램에 정의 된 함수 만 호출 할 수 fsync
있지만 훌륭하게 작동합니다.
(gdb 명령 ' info functions
'은 사용 가능한 모든 기능을 나열합니다.주의하십시오. 프로세스에서 라이브 를 운영 하고 있습니다.)
프로세스의 버퍼에 무엇이 숨겨져 있는지 확인할 수 있는 명령 peekfd
( psmisc
Debian Jessie 및 기타 패키지에 있음)도 있습니다. 다시, /proc/$(pidof python)/fd
peekfd에 인수로 제공 할 유효한 파일 디스크립터가 표시됩니다.
-u
파이썬을 기억하지 못하는 경우 , 항상 명령에 stdbuf
(in coreutils
, 이미 설치됨) 접두어 stdin / stdout / stderr를 버퍼링되지 않은, 라인 버퍼링 또는 블록 버퍼링으로 설정하십시오 :
stdbuf -i 0 -o 0 -e 0 python myscript.py > unbuffered.output
물론, man pages
친구들이여, 안녕! 아마도 별명도 여기에 유용 할 것입니다.
alias python='python -u'
이제 파이썬은 항상 -u
모든 명령 줄 노력에 사용합니다!