다음과 같은 경우, 실시간으로 텍스트 widget에 temp2 스크립트 (하위 프로세스를 통해 실행 됨)의 모든 출력을 인쇄하려고합니다.Python/Tkinter : 루프 반복이 완료되지 않았습니다.
제가 직면 한 문제는 temp2에서 i <= 468
에 대해 스크립트가 정상적으로 작동하고 있으며 실시간으로 표시됩니다.
그러나 내가 i = 469
이상을 넣으면 완료없이 많은 반복 후에 실행이 중단됩니다.
예를 들어 i = 469
의 경우 로그 파일에는 i = 469
에서 i = 3
까지의 항목이 있습니다. 거기서 모든 과정이 멈춘다.
참고 : 값 i = 469
은 컴퓨터에서 다를 수 있습니다. i = 469
이 잘 작동하면 더 높은 값을 시도하십시오.
Temp1.py가 주 스크립트입니다.
#temp1.py
from Tkinter import *
import Tkinter as tk
import os
import ttk
os.system('echo OS ready')
os.system('chmod 755 *')
import subprocess
import sys
#Creating new Window to display output
t = Tk()
t.title('output Run Display')
t.geometry('800x1000-5+40')
t.state('normal')
little = Label(t, text="NRUNTEST OUTPUT LOG").grid(column = 0, row = 0)
log = Text(t, state='disabled', width=115, height=150, wrap='none')
log.grid(row = 1, column = 0)
test=subprocess.Popen('temp2',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#stdout
while True:
line_out = test.stdout.readline()
line_er = test.stderr.readline()
if line_out == "" and line_er == "":
break
else:
log['state'] = 'normal'
log.insert('end', line_out)
log.insert('end', line_er)
log['state'] = 'disabled'
print line_out
print line_er
t.update()
t.mainloop()
그리고 아래는 제가 서브 프로세스를 실행하고있는 스크립트입니다. 처리가 중지하고 반환되는 데이터 avalilable의 새로운 라인이있는 경우에만 다시 시작을 의미하는 -
#temp2 #csh script
set i = 469
while ($i > 0)
echo i is $i | tee -a log
set i = `expr "$i" - 1`
end
'else :'행이 정확하게 들여 쓰기되어 있습니까? 또한 아래 줄은 유효하지 않은 것으로 보입니다 ... – eumiro
내 통역사에서 괜찮 았는데 여기 유닉스에서 창 기계로 복사 붙여 넣기로 인한 들여 쓰기 오류가 수정되었습니다 – Ani