Как использовать данные устройства из библиотеки C ++ в последующем анализе на другом языке - PullRequest
0 голосов
/ 12 июня 2018

У меня есть API в C ++, который подключается через Bluetooth к устройству и измеряет данные.Теперь я хочу использовать эти полученные данные LIVE и оценивать их на другом языке, например R или Python, как это сделать?Таким образом, я получаю живые данные из моего c ++ API из консольного приложения в пределах Visual Studio, теперь я хочу передать этот поток данных другому «экземпляру», например Python или R (возможно, из другой IDE), и запустить свой сценарий для данных.После этого данные не нужно пересылать обратно.

Как это можно сделать правильно или правильно?Вначале я думал, что мне придется добавить встроенную поддержку Python в мой проект C ++, но теперь я думаю, что этого будет достаточно, чтобы просто взять этот небольшой кусочек данных и передать его на экземпляр локального сервера, где, например, мое приложение R / Shinyзапускает и читает его как фрейм данных?

Кто-нибудь работал с библиотекой C ++ для устройства и передавал эти данные другим анализом на другом языке?Как ты это сделал?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Если обе программы независимы, вы можете просто использовать стандартный системный канал.

Вы просто запускаете обе программы с системного терминала, передавая выходные данные первой в качестве ввода второй.
Синтаксис обычно такой:

cpp_program.exe | python_program.py

Затем вы просто используете стандартный вывод в программе C ++ (такие функции, как printf или std::cout, которые просто записывают данные в терминал).В другой программе вы используете стандартную функцию для чтения данных с терминала.

У этого решения есть несколько недостатков:

  • Потоки ввода / вывода обычно обрабатываются как текст.Если вы хотите передать двоичные данные, могут возникнуть некоторые проблемы.Например, в некоторых системах байты / символы "\n" могут быть заменены на "\r\n".
  • Вы не можете использовать пользовательский ввод во второй программе.(По крайней мере, без использования некоторых хитростей для доступа к реальному входу терминала.)
  • Трубы имеют конечный размер.Если вторая программа должна замедлять обработку данных так же быстро, как первая программа их производит, первая программа может быть замедлена операциями печати, которые ожидают опустошения канала.(Или, может быть, выдает исключение. Я не уверен.) В этом случае лучше использовать файл в качестве буфера.
0 голосов
/ 12 июня 2018

Я думаю, что лучшим способом было бы использовать связь TCP / IPC через сокет.

В C ++ реализовать сервер, который считывает данные и публикует их в сокет.

В реализации Pythonклиент, который просто слушает сокет и обрабатывает данные каждый раз, когда он публикуется сервером C ++.

Если вам нужна легкая библиотека C ++ для связи через сокет, я предлагаю посмотреть либо ZMQ , либо nanomsg , но если ваш вариант использования достаточно прост, использование родной socket может сделать работу просто и эффективно.

Редактировать: Если вы хотите использовать ZMQ так, как вам нужноможно начать с ZGuide .У вас также есть учебник о передаче данных между C ++ и Python с использованием zmq.Nanomsg - это форк ZMQ, поэтому к нему применима большая часть концепции ZMQ.

Если вы хотите использовать собственный сокет, уже есть много учебников как на C ++, так и на Python, просто поищите в Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...