昨天我问了一个关于我在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),其描述如何重定向输出来自儿童进程,但问题是在评估完成后收到输出。
你为什么要这样做?这是__exactly__当人们说某人“滥用eval”时人们正在谈论的内容。这整个方法是错误的,重定向输出不会解决它。 – agf
然后我应该使用什么方法?请赐教,因为我对Python编程颇为陌生 – Nait
我不能回答这个问题,因为你还没有清楚地知道你在做什么,我在回答你的上一个问题时提出了一个建议。你试过'testmodule = __import __(test)',然后'ret = getattr(testmodule,test)()'?那至少会比'eval'好。另外,为什么你的'test'打印输出而不是使用'yield'或'return'?从任何语言输出信息都是错误的。 – agf