我想创建一个壳会控制的一个单独过程中,我建立的处理模块。可能吗?怎么样?

编辑:

我已经实现的方式发送命令的次级工艺:我创建了一个 code.InteractiveConsole 在这一进程,并附加一个输入队列和输出的队列,这样我就可以命令控制台从我的主要过程。但我想要它在一个空壳,可能是一个 wx.py.shell.Shell, ,因此用户的程序可以使用它。

有帮助吗?

解决方案

  1. 首先创建外壳
  2. 通过将本地变量清空来将 shell 与应用程序分离
  3. 创建您的代码字符串
  4. 编译代码串并得到代码对象
  5. 在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 哪有然后编写,阅读时应参父进程来加以执行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top