Python pexpect - перенаправить дочерний стандартный вывод в текстовый виджет tkinter - PullRequest
0 голосов
/ 09 июля 2019

Я разрабатываю скрипт на python, который вызывает и выполняет скрипт csh. Для этого я использую pexpect.spawnu, который вызывает скрипт и отправляет параметр каждый раз, когда его запрашивает скрипт csh.

Моя проблема заключается в том, что мне нужно перенаправить стандартный вывод сценария csh в текстовый виджет tkinter в режиме реального времени, но в этот момент информация записывается в текстовый виджет только при закрытом дочернем элементе.

Я уже пытался перенаправить весь файл child.log в стандартный вывод и стандартный вывод в текстовый виджет, но даже в этом случае информация записывается только при закрытом дочернем элементе.

child = pexpect.spawnu('script_name'+ param1 + ' '+ param2, timeout=None)

child.logfile = sys.stdout

for line in child:

    self.text1.insert(tk.INSERT, line) # this will be inserted only when child is closed

    if 'option' in line:
       child.sendline(opt1)

child.close()

Я пытаюсь поместить файл child.log для вставки стандартного вывода непосредственно в текстовый виджет, но все равно не могу.

Спасибо.

[EDIT]

Смотрите решение в комментарии.

1 Ответ

0 голосов
/ 09 июля 2019

Кажется, текстовый виджет обновлялся только тогда, когда класс заканчивает выполнение.После вставки мне нужно всего лишь обновить текстовый виджет для просмотра информации в режиме реального времени, например:

child = pexpect.spawnu('script_name'+ param1 + ' '+ param2, timeout=None)

child.logfile = sys.stdout

for line in child:

    self.text1.insert(tk.INSERT, line)
    self.text1.update() # update the information in the text widget

    if 'option' in line:
       child.sendline(opt1)

child.close()

Это решено, спасибо!

...