2017-12-26 40 views
0

아래 예제를 사용하여 다른 스크립트를 호출하고 실행이 완료된 후 전체 출력을 생성하는 내 스크립트는 다음과 같습니다. 동시.
출력은 한 줄씩 출력되고 결국 전체 출력이 출력되지 않습니다.파일에서 인쇄 로그를 쓰는 동안 화면 버퍼에서 지연되는 파이썬 하위 프로세스

./My_Tests.py ALL 
TC 1 : PASSED 
TC 2 : PASSED 
Tatal Passed Tests : 2 
Tatal Failed Tests : 0 

My_Tests.py는 :

from subprocess import Popen, PIPE, STDOUT 
with Popen("./tests.py", stdout=PIPE, stderr=STDOUT, bufsize=1, universal_newlines=True) as p, \ 
    open('tests.log', 'ab') as file: 
    for line in p.stdout: # b'\n'-separated lines 
     print(line, end='') #new addition 
     sys.stdout.buffer.write(line) 
     file.write(line) 

또한 명령 아래로 시도했지만 그것은 단지 터미널과 파일에 출력을 저장하지 인쇄합니다.
수입 서브 프로세스

# Run command and redirect it by | tee to a file named out.txt 
p = subprocess.Popen([command, '|', 'tee', 'out.txt']) 
p.wait() 
+0

아무도 도와 줄 수 있습니까? –

+0

u가 https://stackoverflow.com/questions/15535240/python-popen-write-to-stdout-and-log-file-simultaneously에서 볼 수있는 기회를 얻었습니까 –

+0

감사합니다. 그렇습니다. 그러나 나는 그것에 갇혀있었습니다. 어떻게 내가 내 문제를 위해 그것을 사용할 수 있습니다. 팁 고마워. –

답변

0

문제와 해결책이 무엇인지 : 내 tests.py 파일 내가 잘못하고 있었는지 많은 인쇄 진술했다
:

  • 내가 tests.py 파일을 호출했다 전체 파일이 명백하게 실행되도록 만든 위의 코드 안에 직접 넣은 다음 출력을 인쇄하십시오. 여기

내가 무슨 짓을 :
1. 위의 서브 프로세스 코드에 대한 기능을 만들었습니다.
2. tests.py 내에서 코드의 모든 부분에 대해 함수를 만들고 n 개의 테스트를 만들었습니다 .-n.py
3. 하위 프로세스 함수 코드 내에서 thiese tests-n.py를 차례로 호출합니다. 부모 파일은 이제 tests.py가되었습니다

from subprocess import Popen, PIPE, STDOUT 

    def logc(file, logfile): 
    with Popen(file, stdout=PIPE, stderr=STDOUT, bufsize=1, universal_newlines=True) as p, \ 
     open(logfile, 'ab') as file: 
     for line in p.stdout: # b'\n'-separated lines 
      print(line, end='') #new addition 
      sys.stdout.buffer.write(line) 
      file.write(line) 

    os.system("> logs.py") 
    logc("tests1.py", "logs.py") 
    logc("tests2.py", "logs.py") 
    logc("tests3.py", "logs.py") 
    logc("tests3.py", "logs.py")