현재 bash 터미널에서 다음 세 가지 명령을 실행합니다.
1:php test.php >> test.log
2:python test.py >> test.log
3:sh test.sh >> test.log
그리고 다른 창에서 실행합니다:tail -f test.log
1개의 php와 3개의 bash를 test.log에 실시간으로 작성할 수 있습니다.
그런데 왜 Python은 Python 프로그램이 끝난 후에 test.log에만 기록합니까?
그리고 다음과 같습니다:
echo "cd $test_dir && /usr/bin/python test.py &" >> test_py.sh && sh test_py.sh
sh 스크립트에 Python을 넣는 것도 작동하지 않습니다
첨부파일:
1 test.php
<코드><?php $i = 1; 동안 (참) { 수면(1); $i++ "\r\n"을 인쇄합니다. if ($i > 10) { 부서지다; } } ?>
2 test.py
<코드>#!/usr/bin/python #코딩=utf-8 수입 시간 나는=1 True인 동안: 나는 += 1 나 인쇄해 시간.수면(1) 내가 10보다 큰 경우: 부서지다 인쇄 "------------끝----------"
3 test.sh
<코드>#!/usr/bin/env bash # cd /Users/cg/MyFiles/test && /usr/bin/python cgcg.py & 나는=1 동안 [[ 1 ]]; 잠 1 i=`expr $i + 1` 에코 $i 완료
이 경우 PHP가 블록 버퍼링을 수행하지 않는 이유가 무엇인지 궁금합니다.
Python 터미널이 아닌 장치의 표준 출력을 즉시 보려면 직접 플러시(
print(..., flash=True)
하거나 Python에서sys를 사용하면 됩니다. 2 .stdout.flush
),python -u
를 사용하여 스크립트를 실행하거나sys.stdout
를 바꿀 수 있습니다.print(..., flush=True)
或者 Python 2 里用sys.stdout.flush
),要么使用python -u
来运行脚本,要么你去把sys.stdout
替换掉。通常,对标准输出(以及其它除标准错误之外的文件)的输出,默认是带缓冲的,你可以看一下这个教程。对于终端是行缓冲,对于其它设备是块缓冲。标准错误一般是无缓冲的。
如果要写日志,或者做基于行的持续性输出的话,记得设置相应的缓冲模式(
일반적으로 표준 출력(및 표준 오류를 제외한 다른 파일)의 출력은 기본적으로 버퍼링됩니다. 터미널을 위한 라인 버퍼링과 다른 장치를 위한 블록 버퍼링. 표준 오류는 일반적으로 버퍼링되지 않습니다. 🎜 🎜로그를 작성하거나 라인 기반 연속 출력을 수행하려면 해당 버퍼 모드(open
函数的 buffer 参数),或者在合适的地方调用.flush()
open
함수의 버퍼 매개변수)를 설정하거나 적절한 메서드에서.flush()를 호출해야 합니다. 장소
메소드. 🎜