Использование каналов для передачи данных между двумя анонимными скриптами Python - PullRequest
1 голос
/ 29 июня 2009

Учитывайте это в командной строке Windows.

scriptA.py | scriptB.py

Я хочу отправить объект словаря из scriptA.py в scriptB.py, выбрав его и отправив по каналу. Но я не знаю, как этого добиться.

Я читал некоторые посты на эту тему здесь, но обычно есть ответы на эти строки:

Popen( "scriptA.py"´, ..., and so on )

Но на самом деле я не знаю названия "scriptA.py". Я просто хочу получить готовый объект pipe и отправить / получить буфер данных.

Я пробовал sys.stdout / stdout, но я получаю ошибки дескриптора файла и в основном не пробовал этот трек слишком далеко.

Процесс прост:

scriptA.py:

  • (1) Словарь Pickle / Serialize в буфер строк
  • (2) Отправить stringbuffer по трубе

scriptB.py

  • (3) Получите буфер строк из трубы
  • (4) Распаковать / десериализовать буфер строк в словарь

Ответы [ 3 ]

7 голосов
/ 29 июня 2009

Когда вы говорите это оболочке

scriptA.py | scriptB.py

Оболочка соединяет их с трубкой. Вы НИЧЕГО не делаете, и это отлично работает.

Все, что scriptA.py пишет в sys.stdout, отправляется на scriptB.py

Все, что scriptB.py читает из sys.stdin, пришло с scriptA.py

Они уже подключены.

Итак, как вы передаете словарь от стандартного вывода в A к стандартному вводу в B?

  1. Рассол . scriptA.py выводит словарь в стандартный вывод. scriptB.py загружает словарь из стандартного ввода.

  2. JSON . scriptA.py выводит словарь в стандартный вывод. scriptB.py загружает словарь из стандартного ввода.

Это уже встроено в Python и требует очень и очень мало кода.

В scriptA, json.dump( {}, sys.stdout ) или pickle.dump( {}, sys.stdout )

В scriptB, json.load( sys.stdin ) или pickle.load( sys.stdin )

2 голосов
/ 29 июня 2009

Труба просто помещает стандартный вывод A в стандартный вывод B.

А делает:

import sys
sys.stdout.writelines(output)

B просто делает:

import sys
input = sys.stdin.readlines()
0 голосов
/ 29 июня 2009

Когда вы что-то передаете, вы (как правило) подаете стандартный вывод одной программы на стандартный ввод другой. Я думаю, что вы должны продолжать пробовать этот путь.

Если у вас возникли проблемы с возможностью прочитать вывод вашего первого скрипта со вторым, проверьте этот вопрос .

...