Python pexpect-将子标准输出重定向到tkinter文本小部件

时间:2019-07-09 13:20:29

标签: python python-3.x spawn pexpect

我正在开发一个调用并执行csh脚本的python脚本。为此,我使用了pexpect.spawnu,该脚本调用脚本并在csh脚本每次请求时发送一​​个选项。

我的问题是我需要实时将csh脚本的stdout重定向到tkinter文本小部件,但目前仅在关闭子级时将信息写入文本小部件。

我已经尝试过将所有child.log文件重定向到stdout,并将stdout重定向到文本小部件,但是即使如此,信息也仅在child关闭时才写入。

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文件放入stdout,直接将其插入文本小部件中,但是我仍然不能。

谢谢。

[编辑]

请参阅评论中的解决方案。

1 个答案:

答案 0 :(得分:0)

似乎仅在类完成执行时才更新文本小部件。 插入后,我只需要更新文本小部件即可实时查看信息,例如:

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()

解决了,谢谢!