В следующем случае я пытаюсь распечатать весь вывод сценария temp2 (который выполняется через подпроцесс) в виджет текстового поля в режиме реального времени.
Проблема, с которой я сталкиваюсь, заключается в следующем: в 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()
И ниже скрипт, который я запускаю через подпроцесс.
#temp2 #csh script
set i = 469
while ($i > 0)
echo i is $i | tee -a log
set i = `expr "$i" - 1`
end