Мне нужно вызвать другую версию 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
Скрипт, который вызывается из приведенного выше скрипта и возвращает dict.Этот сценарий должен получить данные, затем обработать их, а затем вернуть дикт.
#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 для чтения и записи, используйте комбинациюпредыдущие методы. "Однако мне не ясно, как это работает в двух разных файлах, или как вызывается внешний питон, как мой код выше.
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)