1

2 つの .py プログラムがあります。2 番目の .py プログラムを呼び出します。2 番目のプログラムは問題を解決します。だから私はその解決策を最初のものにして使いたいと思っています。例えば:

1.py:

2.py を呼び出す

y=x+2

2.py:

x = 2+2

4

2 に答える 2

0

モジュールを使用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おそらくもっとエレガントな解決策があるでしょう。もしそうなら、私も興味があります。

于 2013-08-17T08:12:36.750 に答える