显示子进程标准输出的小部件?

3

我有一个基于Python的Tkinter脚本,使用子进程模块执行一些命令。我需要在GUI上显示标准输出。由于我对tk(一个星期Bold :))很陌生,我需要你的建议,应该如何继续。

  1. 我应该学习哪种小部件来显示标准输出。
  2. 如何将子进程的标准输出链接到您提到的小部件。

子进程运行快还是长时间运行? - Donal Fellows
长时间运行,该进程可能需要5-10分钟才能执行完毕。 - Ani
1个回答

2
您可能希望使用 Tkinter.Text 小部件,具体描述请参见 此处
该小部件可用作缓冲区,在其中应插入文本。您只需了解到需要为 subprocess 输出中的每个新行插入文本即可。例如:
t = Tkinter.Text(root)
while some_condition:
    s = p.readline()          # get subprocess output
    t.insert(END, s)

编辑:如果需要逐行获取子进程输出,请点击这里

您可能还想了解Tkinter.ScrollbarText.see(),以调整显示效果。


1
虽然这是所需的_概述_,但您希望在处理过程中保持GUI实时响应。这使得事情变得更加复杂(尽管不像如果您想与子进程交互那样复杂;有许多微妙之处)。 - Donal Fellows
没错,保持活动状态有点不同,因为需要刷新 GUI 界面。但这更取决于应用程序:GUI 是程序的根还是仅仅是一个显示?这将有两个不同的答案,使用 root.after() 或访问 t 属性。 - Joël
嘿,大家好,感谢你们的回复。我会查看这些链接并会尽快回复你们。 实际上,我有一个非常复杂的csh脚本,使用起来相当复杂。通过GUI,我试图将用户与复杂性隔离开来。因此,向用户提供csh脚本执行的实时信息是必要的。 - Ani
我昨天尝试了你建议的类似实现,唯一的问题是当控制台执行完成后,我只能在文本框中获取一次stdout。 - Ani
第一个编辑中链接的答案是否有效?第二个问题,您能否发布您目前为止的代码?有一个小技巧可以在GUI中使用,因为它们不是过程性的而是事件驱动的(我希望我使用了正确的术语)。 - Joël

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接