Рассмотрим это в командной строке Windows.
scriptA.py | scriptB.py
Я хочу отправить объект-словарь из scriptA.py в scriptB.py с помощью pickle: его и отправки его по каналу. Но я не знаю, как это сделать.
Я прочитал несколько сообщений об этом предмете здесь, но обычно там ответы по этой линии:
Popen( "scriptA.py"´, ..., and so on )
Но я действительно не знаю имя "scriptA.py". Я просто хочу завладеть готовым объектом трубы и отправить/получить databuffer.
Я пробовал sys.stdout/stdout, но я получаю ошибки файлового дескриптора и в основном не пробовал этот трек очень далеко.
Процесс прост:
scriptA.py:
scriptB.py
Если вы скажете это оболочке
scriptA.py | scriptB.py
Оболочка соединяет их с трубой. Вы НИЧЕГО, и он отлично работает.
Все, что scriptA.py
записывает в sys.stdout, идет в scriptB.py
Все, что scriptB.py
читает из sys.stdin, произошло от scriptA.py
Они уже подключены.
Итак, как вы передаете словарь из stdout в в stdin в B?
Pickle. scriptA.py
сбрасывает словарь в stdout. scriptB.py
загружает словарь из stdin.
JSON. scriptA.py
сбрасывает словарь в stdout. scriptB.py
загружает словарь из stdin.
Это уже встроено в Python и занимает очень мало кода.
В scriptA, json.dump( {}, sys.stdout )
или pickle.dump( {}, sys.stdout )
В scriptB, json.load( sys.stdin )
или pickle.load( sys.stdin )
Труба просто ставит stdout из A в stdin из B.
A делает:
import sys
sys.stdout.writelines(output)
B просто делает:
import sys
input = sys.stdin.readlines()
Когда вы что-то прокладываете, вы (обычно) подаете стандартный вывод одной программы в стандартный ввод другого. Я думаю, вам следует продолжать этот путь.
Если у вас возникли проблемы с тем, что вы можете читать ваш первый script с вашей секундой, посмотрите этот вопрос.