2017-09-11 14 views
1

스크립트 중 하나가 다른 스크립트를 실행하고 그것을 실시간으로 수신하려고 할 때 두 개의 스크립트를 만들었습니다.아직 살아있는 동안 아이의 표준 출력에서 ​​읽는 방법

출력을 얻기 위해 시도하는 스크립트 :

import subprocess 
p = subprocess.Popen("python .\\print.py", stdout=subprocess.PIPE) 
print p.stdout.readline() 

두 번째 스크립트 :

import time 
print "1se12d12d32d3223" 
print "\r" 
time.sleep(10000) 

문제는 자식 프로세스가 죽었을 경우에만 나는 심지어 라인이 있지만, 출력을 얻을 수 있다는 것입니다 stdout에 이미 쓰여졌습니다.

나는 다음과 같은 시도 : 사용 진정한는 popen 인수
  • 로 = 쉘을 사용하여 "읽기"파이프
  • 에서 읽기 후는 popen에 대한 인수로 os.pipe를 사용

    • 및 BUFSIZE = 1 Popen 인수로
    • stdout.read(), stdout.readlines(), stdout.read (1) 등 사용 ...
    • fcntl 모듈을 사용하여 파이프를 "차단하지 않음"으로 설정할 수 없습니다. 내가 윈도우를 사용하기 때문에

    내가하고있는 모든 작업은 프로세스가 아직 살아있는 동안 하위 프로세스의 stdout 첫 줄에서 읽습니다. 파이썬으로 어떻게 할 수 있습니까?

  • 답변

    0

    기본적으로 파이썬은 출력을 버퍼링합니다. 일부 상황에서는 출력이 자동으로 비워집니다. 예 : 터미널에서 두 번째 스크립트를 실행하면 즉시 출력을 볼 수 있습니다.

    sleep() 호출 전에 sys.stdout.flush()을 삽입하여 명시 적으로 출력을 플러시 할 수 있습니다.