蟒蛇:堵w.py。外壳。壳到一个单独的进程,
-
21-08-2019 - |
题
我想创建一个壳会控制的一个单独过程中,我建立的处理模块。可能吗?怎么样?
编辑:
我已经实现的方式发送命令的次级工艺:我创建了一个 code.InteractiveConsole
在这一进程,并附加一个输入队列和输出的队列,这样我就可以命令控制台从我的主要过程。但我想要它在一个空壳,可能是一个 wx.py.shell.Shell
, ,因此用户的程序可以使用它。
解决方案
- 首先创建外壳
- 通过将本地变量清空来将 shell 与应用程序分离
- 创建您的代码字符串
- 编译代码串并得到代码对象
- 在shell中执行代码对象
from wx.py.shell import Shell frm = wx.Frame(None) sh = Shell(frm) frm.Show() sh.interp.locals = {} codeStr = """ from multiprocessing import Process, Queue def f(q): q.put([42, None, 'hello']) q = Queue() p = Process(target=f, args=(q,)) p.start() print q.get() # prints "[42, None, 'hello']" p.join() """ code = compile(codeStr, '', 'exec') sh.interp.runcode(code)
笔记:由于一些酸洗问题,我从第一张海报中窃取的 codeStr 可能无法在这里工作。但重点是您可以在 shell 中远程执行您自己的 codeStr。
其他提示
你可以创建一个 Queue
你通向独立的过程。从 蟒蛇医:
from multiprocessing import Process, Queue
def f(q):
q.put([42, None, 'hello'])
if __name__ == '__main__':
q = Queue()
p = Process(target=f, args=(q,))
p.start()
print q.get() # prints "[42, None, 'hello']"
p.join()
例如: 在 w.py。外壳。外壳的文档 该constructur参数作
__init__(self, parent, id, pos, size, style, introText, locals,
InterpClass, startupScript, execStartupScript, *args, **kwds)
我没有尝试过,但是 locals
可能是字典的地方变量,这可以通过向的外壳。所以,我会尝试下:
def f(cmd_queue):
shell = wx.py.shell.Shell(parent, id, pos, size, style, introText, locals(),
...)
q = Queue()
p = Process(target=f, args=(q,))
p.start()
内壳,然后你应该能把你的命令 cmd_queue
哪有然后编写,阅读时应参父进程来加以执行。
不隶属于 StackOverflow