我有两个.py程序。我称第二个.py程序,第二个程序解决了一个问题。所以我想让这个解决方案到第一个并使用。例如:如何从另一个.py中获取变量
1.py:
呼叫2.py
Y = X + 2
2.py:
X = 2 + 2
我有两个.py程序。我称第二个.py程序,第二个程序解决了一个问题。所以我想让这个解决方案到第一个并使用。例如:如何从另一个.py中获取变量
1.py:
呼叫2.py
Y = X + 2
2.py:
X = 2 + 2
使用subprocess
模块,并创建一个管道。然后,您可以腌制变量并通过管道发送它(请参阅subprocess的文档)。
下面是一个例子:
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)
用于通信communicate.py
模块为了确保您在stdout
流的正确位置开始取消打印,我建议设置一个标记,就像我在BEGIN
字符串中那样。可能有更优雅的解决方案,如果是的话,我也很感兴趣。
有一个名为pickle的python例程可以帮助解决这个问题,但我相信接收代码必须知道拿起pickle变量。你可以发布你正在尝试使用的代码吗? – Paul
@Paul我更新了我的问题 – nurimuri