【发布时间】:2011-08-18 12:09:40
【问题描述】:
我昨天问了一个关于我用 Python (Passing wxPython objects as multiprocessor arguments) 编写的程序存在问题的问题。我设法通过对评估脚本的函数使用多进程进程来解决该问题。但是,由于脚本是从不同的进程运行的,它们的输出没有正确地重定向到我的 wxPython TextCtrl 窗口。因此,我正在寻找将子进程的输出不断重定向到我的主进程的方法,以便可以将其写入我的文本窗口。
这是设置进程的函数:
def createprocess(test):
q = Queue()
q.put(test)
p = Process(target=runtest, args=(q,))
p.start()
p.join()
return q.get()
这是进程的目标函数:
def runtest(q):
test = q.get()
exec 'import ' + test
func=test+'.'+test+'()'
ret = eval(func)
q.put(ret)
我找到了这个线程 (How can I send python multiprocessing Process output to a Tkinter gui),它描述了如何重定向子进程的输出,但问题是在评估完成后才收到输出。
【问题讨论】:
-
你为什么要这样做?当人们说某人“滥用
eval”时,这正是。这整个方法是错误的,重定向输出不会解决它。 -
那我应该用什么方法呢?请赐教,因为我对 python 编程很陌生
-
我无法回答这个问题,因为您没有明确说明您在做什么,我在回答您之前的问题时提出了一个建议。你试过
testmodule = __import__(test),然后ret = getattr(testmodule, test)()吗?这至少会比eval好。另外,为什么你的test打印输出而不是使用yield或return?从函数输出信息在任何语言中都是错误的。
标签: python wxpython stdout multiprocessing pipe