我正在尝试在Windows 7上使用Python 2.7.2将stdout实时重定向到Tkinter
Text小部件中。在下面的代码中,我打算让print语句每2秒出现在Text小部件中。相反,所有三行
Received sleep-command
Going to sleep for 2 s
Just woke up
一旦对sleep()和mod1.main()都进行了评估,就会同时出现。
令人惊讶的是(至少对我而言),当我不重定向标准输出时,问题就消失了。也就是说,如果我注释掉
sys.stdout = StdoutRedirector(outputPanel)
IDLE实时显示打印报表。有人可以向我解释一下并提出解决方法吗?提前致谢!
这是我的示例代码:
mod1.py
import time
import sys
def main():
print('Going to sleep for 2 s')
time.sleep(2)
print('Just woke up')
text_GUI.py
from Tkinter import *
import sys
import time
import mod1
old_stdout = sys.stdout
class StdoutRedirector(object):
def __init__(self, text_area):
self.text_area = text_area
def write(self, str):
self.text_area.insert(END, str)
self.text_area.see(END)
def sleep():
print('Received sleep-command')
time.sleep(2)
mod1.main()
root = Tk()
# Textbox
outputPanel = Text(root, wrap='word', height = 11, width=50)
outputPanel.grid(column=0, row=0, columnspan = 2, sticky='NSWE', padx=5, pady=5)
sys.stdout = StdoutRedirector(outputPanel)
# Sleep button
sleepBtn = Button(root, text='Sleep', command=sleep)
sleepBtn.grid(row=1, column=1, sticky='E', padx=5, pady=5)
root.mainloop()
sys.stdout = old_stdout
sleepBtn.update_idletasks()
在每个time.sleep(2)
命令之前调用。否则,在睡眠过程结束之前不会更新视图。
问题内容: 如何在Python中将stdout重定向到任意文件? 当从ssh会话中启动运行了很长时间的Python脚本(例如,Web应用程序)并进行背景调整,并且ssh会话关闭时,该应用程序将在尝试写入stdout时引发并失败。我需要找到一种方法来使应用程序和模块输出到文件而不是stdout,以防止由于而导致失败。当前,我使用将输出重定向到文件,并且可以完成工作,但是我想知道是否有一种出于好奇而无
问题内容: 我在cyberciti.biz的评论中看到了这个有趣的问题。 我发现我什至找不到在sh的单行命令中执行此操作的灵活方法。 到目前为止,我对解决方案的想法是: 但是您会看到,这不是同步的,而且致命的是,它是如此丑陋。 欢迎与您分享这个想法。:) 问题答案: 你要 这里的顺序很重要。假设stdin(fd 0),stdout(fd 1)和stderr(fd 2)最初都连接到tty,因此 首先
我这里有一个非常奇怪的用例,我正试图为我的学生编写一些简单的程序,帮助他们学习python。为了让它工作,我在TKinter框架中嵌入了一个PyGame窗口,我需要重定向stdout以更改PyGame窗口中的某些内容。我有重定向工作,如果我重定向到一个文件,它的工作很好,但如果我试图改变文本,它不工作。我将一个字符串硬编码到PyGame文本更改代码中,这是可行的,但由于某些原因,它无法与重定向文本
问题内容: 我有一个要测试使用的应用程序,但是有一些问题。我的目录结构如下: 我想测试中的和模块,然后尝试做 但是在我不能导入我的目录包。 我该如何工作? 基本上,我想从测试的应用程序与和单独的目录。 我尝试将追加到,但是当我从导入时,我仍然从unittest得到一个。 编辑:我的导入和声明是: 和回溯: 问题答案: 要做的一件非常错误的事情是在上附加一个相对路径。如果要确定路径,请进行以下操作:
问题内容: 我知道如何将标准输出重定向到文件,但是我不知道如何将其重定向到字符串。 问题答案: 是的-您可以使用: 然后您可以使用获取字符串。 要指定编码(而不依赖平台定义的编码),请使用构造函数,然后 如果要还原为原始流,请使用:
问题内容: 目录结构: module1.py: 我如何才能将所有模块从模块添加到主类而没有前缀(即像foo = fooBar()一样使用它们,而不是foo = my_modules.module1.fooBar())。 一个明显的决定是在main.py中编写如下内容: 但是我不想在创建新的moduleN时更改main.py。有解决方案吗? 我确实知道导入这样的类不是一个好主意,但是我对此仍然很好奇