Python 스크립트를 호출하는 노드-이상한 실행 순서
Sep 08 2020
나는 상당히 간단한 스크립트를 시도했다.
import time
print("Hello World")
time.sleep(5)
이 프로그램은 수행중인 것처럼 보이는 작업을 정확히 수행합니다. 을 인쇄 Hello World하고 5 초 동안 기다린 다음 종료합니다.
그러나 노드로 이것을 호출하면 상황이 이상해지기 시작합니다.
const spawn = require('child_process').spawn;
const process = spawn ('python3', ['./testIn.py']);
process.stdout.on('data', data => {
console.log(data.toString());
});
process.on('close', code => {
console.log(`child process close all stdio with code ${code}`);
});
이제 일어나는 일은 프로그램이 5 초 동안 기다렸다가 인쇄 한 다음 인쇄 Hello World직후에 종료 된다는 것 입니다. 그것은 두 명령의 순서가 반전처럼, 첫째는 실행입니다 sleep()및하여을 print().
이 이상한 행동이 발생하는 이유에 대한 단서가 있습니까?
답변
2 JohnnyMopp Sep 09 2020 at 21:10
Python은 출력을 버퍼링하므로 프로세스가 끝날 때까지 볼 수 없습니다. 이 -u옵션을 사용하여 Python에 그렇게하지 않도록 지시 할 수 있습니다. 에서 워드 프로세서 의 -u옵션 것입니다 :
stdout 및 stderr 스트림을 버퍼링 해제하도록합니다. 이 옵션은 stdin 스트림에 영향을주지 않습니다.
버전 3.7에서 변경 : stdout 및 stderr 스트림의 텍스트 레이어가 이제 버퍼링되지 않습니다.
그러나 Windows 10에서 3.7.2를 실행 중이며 -u옵션 없이는 코드가 작동하지 않습니다 .
const process = spawn ('py', ['-u', 'testIn.py']);