Python:差し込むwx.py.しています。シェルへの別のプロセス
-
21-08-2019 - |
質問
を作っていきたいシェルを制御する別のプロセスと作成した、マルチプロセモジュールです。可能ですか?いかがですか?
編集:
私達に送信コマンドは、二次工程:を作成しました code.InteractiveConsole
その過程で、添付で入力されたキュー、出力キューだったので、コマンド時本コマンドによるコンソールからの主な工程です。ておきたいのでシェルのう wx.py.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 I盗からのポスター動作しない場合がありこちらのように洗います。その点から行うことが可能ですご自身のcodeStr遠隔できます。
他のヒント
を作成でき Queue
を渡ししますので、別途です。から Python Docs:
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()
例: の wx.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