php - Linux 프로세스 출력 리디렉션 문제에 대해 문의하시겠습니까?
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 13:08:29
0
1
390

현재 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
완료
过去多啦不再A梦
过去多啦不再A梦

모든 응답(1)
phpcn_u1582

이 경우 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()를 호출해야 합니다. 장소 메소드. 🎜
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿