Как передать данные из одной программы в другую python

Недавно понадобилось отправить файлы и данные формы из одного сервиса в другой. Задача кажется тривиальной до тех пор пока с ней не столкнешься. Я использовал для отправки запросов библиотеку requests, что из этого получилось ниже в статье

И так, задача

Есть два сервиса, первый обрабатывает данные полученные из формы, в том числе и файлы, обрабатывает их, и отправляет в другой сервис для сохранения данных.

Файлы мы не хотим сохранять в первом сервисе, а передавать его stream дальше.

Начнем с простого

Для начала подготовим простейший сервис который будет принимать данные и что-то с ними делать.

Сервис принимает например название категории и изображение.

И сервис отправки данных, из формы:

В index.html добавим саму форму:

Довольно простой сервис, неправда ли. Первый стартует на http://127.0.0.1:5001/ второй на http://127.0.0.1:5002/

Ближе к делу, сделаем отправку формы с помощью библиотеке requests

Во втором сервисе в методе пост мы уже получили данные из формы в переменные category и image, допустим нам нужно проверить что категория присутствует в нашем whitelist и затем в запрос добавим secret который известен только нашему сервису.

Импорт собственных модулей в Python. Import modules. Атрибут модуля __name__ и __main__

Модифицируем обработчик запроса POST таким образом:

Читайте также:
В каких программах создают меню

На что здесь следует обратить внимание, в объекте files под ключом image, мы передаем кортеж, где по очереди перечислены filename, stream и mimetype. Это необходимо для того чтобы файл передался с нужными параметрами и на принимающей стороне не было бы проблем с его распознаванием.

Если бы в image, мы записали стразу stream, в принимающий сервис бы пришел файл, но его мета данные мы смогли бы получить только после сохранения.

Как вывод

На поиск особенности описанной выше, мне пришлось потратить чуть больше двух часов и активизировать свои способности экстрасенса. В принципе я полагаю, что где-то в документации, информация о том как передавать stream, есть, но мы же нелюбим читать 🙂

Источник: dev-gang.ru

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Передача данных между программами

#1 Май 15, 2016 23:26:09

Передача данных между программами

Есть скрипт, который обрабатывает данные. Есть второй, который использует данные. Как передавать эти данные между ними, чтобы родительская программа не останавливалась? С помощью pipe это возможно сделать?
Если не сложно, подбросите примеры или литературу по этой теме.

#2 Май 16, 2016 06:04:30

Передача данных между программами

pipe Да возможно. Есть subprocess.Popen, shared memory, socket, файлы ОС, коннекты к базам данных и еще куча способов. Но самый простой способ это объединить скрипты в одну программу. Другие способы надо рассматривать если вы можете объяснить почему нельзя проводить обработку в одной программе.

Работа с файлами в Python. Чтение и запись данных

По поводу не останавливалась. А что вашей программе еще надо делать? От этого собственно и ответ зависит. Если это GUI то у него свои очереди сообщений…

Отредактировано doza_and (Май 16, 2016 06:07:19)

#3 Май 16, 2016 09:22:41

Передача данных между программами

doza_and
pipe Да возможно. Есть subprocess.Popen, shared memory, socket, файлы ОС, коннекты к базам данных и еще куча способов. Но самый простой способ это объединить скрипты в одну программу. Другие способы надо рассматривать если вы можете объяснить почему нельзя проводить обработку в одной программе.По поводу не останавливалась. А что вашей программе еще надо делать?

От этого собственно и ответ зависит. Если это GUI то у него свои очереди сообщений…

Читайте также:
Программа научно исследовательских работ объекта культурного наследия пример

Основная программа довольно большая (2200 строк), она нужна для управления 3D-принтером. Она имеет GUI. Мне нужно установить ее на Raspberry, к которому подцепить маленький дисплей и кнопки, чтобы он читал с флешки файлы, выводил на дисплей и этот список листался кнопками. Для этого написал вспомогательную программу, которая по завершении возвращает имя выбранного файла.

Основная программа его получает и работает с этим файлом. Теперь нужно, чтобы дисплей выводил не только с список файлов, но и процент загрузки файла. Сейчас процент выводится в GUI, нужно чтобы это дублировалось на дисплее, за который отвечает моя программа.

#4 Май 16, 2016 10:03:34

Передача данных между программами

Почти наверняка надо делать не отдельную программу а добавлять функциональность в основную. Одна из основных концепций питона — возможность у модулей реализовать возможность автономной работы и встраивание во внешнюю программу см if __name__ == “__main__”. Вам оно подойдет. Осталось неясно используется одна GUI библиотека или разные. Программы выполняются на 2 устройствах или на одном.

Неясен тезис по поводу 2200 строк. Разбивайте программу на обозримые модули.

Отредактировано doza_and (Май 16, 2016 10:04:10)

Источник: python.su

Как в Python передавать данные из одного скрипта в другой?

Есть скрипт №1, выполняющий роль API на сервере. Работает постоянно. При определенных запросах скрипт №1 должен запускать скрипт №2 и передавать ему определенные данные, которые скрипт №2 обработает и сделает определенные действия. Если коротко, скрипт №1 запускает скрипт №2 и говорит ему «На тебе вот эти данные, делай с ними что хочешь»=)). Как это реализовать?

  • Вопрос задан более двух лет назад
  • 1608 просмотров

1 комментарий

Простой 1 комментарий

Читайте также:
Как узнать геолокацию по номеру телефона без его согласия через программу

solotony

а просто передать через файл не получается ? ну может не файл а пайп или сокет ?

или можно просто открыть дочерний процесс и напрямую писать в его входной поток.

Решения вопроса 1

Скрипт №1 добавляет задачу, скрипт №2 получает ее и выполняет необходимые действия

Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 3

Когда устанешь разбирать с селерами, рэббитами, и прочей ненужной дичью, просто открой доку питона и прочитай про мультипроцессинг
https://docs.python.org/3/library/multiprocessing.html

Ответ написан более двух лет назад
Комментировать
Нравится 2 Комментировать

а в описании Celery мы видим такие штуки — RabbitMQ и Redis, вот если не нужна функциональность Celery, то можно этими ребятами пользоваться (Есть еще некоторое количество брокеров сообщений, можно погуглить) И если Redis — это всетаки БД, просто с опцией публикации и чтения данных (как каналы в телеграм, можно опубликовать что то, а подписанные на получение скрипты это получат), то Rabbit предназначен ровно для обмена данными между двумя приложениями, в том числе и скриптами Python

Ответ написан более двух лет назад
Комментировать
Нравится Комментировать

2ord

В общем, используется IPC.
Часто для таких вещей используются очереди. Например, ZeroMQ или что-то другое, например, популярный RabbitMQ.

Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +1 ещё

Как задать отношения в sqlalchemy что бы свойство было доступной в обеих моделях?

  • 1 подписчик
  • вчера
  • 33 просмотра

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru