2 つの .py プログラムがあります。2 番目の .py プログラムを呼び出します。2 番目のプログラムは問題を解決します。だから私はその解決策を最初のものにして使いたいと思っています。例えば:
1.py:
2.py を呼び出す
y=x+2
2.py:
x = 2+2
モジュールを使用subprocess
してパイプを作成します。次に、変数をピクルしてパイプを介して送信できます(subprocessのドキュメントを参照)。
次に例を示します。
通信用モジュールcommunicate.py
:
import sys
import subprocess as sp
import cPickle
BEGIN = 'pickle_begin'
def send_and_exit(x):
sys.stdout.write(BEGIN + cPickle.dumps(x))
sys.stdout.flush()
sys.exit(0)
def execute_and_receive(filename):
p = sp.Popen(["python", filename], stdout=sp.PIPE)
(out, err) = p.communicate()
return cPickle.loads(out[out.find(BEGIN) + len(BEGIN):])
1.py
:
from communicate import *
x = execute_and_receive("2.py")
y = x + 2
2.py
:
from communicate import *
x = 2 + 2
send_and_exit(x)
確実にするために、ストリームの正しいポイントで unpickle を開始します。私がストリングstdout
で行ったように、マーカーを設定することをお勧めします。BEGIN
おそらくもっとエレガントな解決策があるでしょう。もしそうなら、私も興味があります。