Попен Общение между процессами в разных версиях - PullRequest
0 голосов
/ 10 ноября 2018

Мне нужно вызвать другую версию 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)
...