Popen在不同版本的进程之间进行通信

时间:2018-11-10 04:03:24

标签: python subprocess pickle communication popen

我需要从主脚本调用不同版本的python。我已经能够使用popen来调用脚本,并且能够使用pickle从其返回值。但是,我需要将数据发送到脚本(不仅仅是传递参数)。

#getPickel.py

import pickle
import subprocess as sp
p = sp.Popen("py -2 ./sendPickle.py", stdout=sp.PIPE, stdin=sp.PIPE,universal_newlines=True)
stdout, stdin = p.communicate()
results = pickle.loads(stdout)
print 'Returned from send to get: ',results

从上面的脚本调用的脚本,并返回一个字典。该脚本需要接收数据,然后处理它,然后返回字典。

#sendPickle.py

import pickle
import sys
#Here should load or read data by the getPickle.py file then next line modify it, then return it
#received = pickle.loads(sys.stdin) # something like this is the goal, but does not work
to_return = {'a':1, 'b': 2}
pickle.dump(to_return, sys.stdout)

我发现此示例代码说:“要设置Popen实例进行读写,请结合使用先前的技术。”但是,我不清楚这在两个不同的文件中是如何工作的,或者像上面的代码那样调用了外部python。

import subprocess
print '\npopen2:'
proc = subprocess.Popen(['cat', '-'],
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE,
                        )
stdout_value = proc.communicate('through stdin to stdout')[0]
print '\tpass through:', repr(stdout_value)

0 个答案:

没有答案