Я разработал C ++ API для своего проекта. Также создал из этого общую библиотеку Linux .so. Мне нужно вызывать эти API, используя ключевые слова фреймворка робота.
Заранее спасибо.
API C ++ можно легко вызвать с помощью библиотеки Python ctypes. Как вы уже знаете, библиотеки Python могут быть интегрированы в каркас робота.
Допустим, вам нужно вызвать API SendMesg C ++ с использованием фреймворка робота.
Пожалуйста, выполните следующие шаги:
1. Создание .so файла библиотеки API C ++
connect.cpp
extern «C» {
int Initialize(char* ip, int port)
{
//creates socket connection with remote host
}
int SendMesg(char* msg)
{
//Send mesg code
}
}
g ++ -std = c ++ 11 -fpic -c connect.cpp
g ++ -std = c ++ 11 -shared -g -o connect.so connect.o
Теперь вы создали общую библиотеку connect.so по тому же пути, что и ваш файл cpp.
2. Создание оболочки Python для API C ++
connectWrapper.py
импортные типы
класс connectWrapper:
def __init__(self, ip , port):
self.Lib = ctypes.cdll.LoadLibrary('absolute path to connect.so')
self.Lib.Initialize.argtypes = [ctypes.c_char_p, ctypes.c_int]
self.Lib.Initialize(ip, port)
def SendMessageWrapper(self, msg):
self.Lib.SendMesg.argtypes = [ctypes.c_char_p]
print self.Lib.SendMesg(msg)
4 вещи, которые следует помнить при создании API-оболочек Python.
а) имя файла Python совпадает с именем класса
б) При вызове API с использованием ctypes вы всегда должны указывать типы входных параметров. В противном случае вы можете получить следующую ошибку при запуске файла робота с использованием этой библиотеки Python:
NotImplementedError: переменные функции еще не поддерживаются; указать
список параметров
В этом случае мы указали параметры как ctypes.c_char_p для строковых типов и ctypes.c_int как целое число. Для получения дополнительной информации вы можете использовать следующие:
[http://python.net/crew/theller/ctypes/tutorial.html#specifying-the-required-argument-types-function-prototypes][1]c) Абсолютный путь к connect.so указан в ctypes.cdll.LoadLibrary API.
d) Установите исполняемый файл Python, используя chmod + x connectWrapper.py
3. Добавление библиотеки Python в файл робота
test.robot.txt
** * Настройки * **
Библиотека «absoulte path to connectWrapper.py» 10.250.0.1 8080
** * Контрольные примеры * **
Отправить сообщение
SendMessageWrapper "Hello World"
Как вы можете заметить, библиотека Python добавлена в раздел настроек с аргументами, передаваемыми как IP и порт. Мы добавили ключевое слово SendMessage в раздел тестовых случаев со строковым сообщением «Hello World» в качестве входного аргумента.
Я надеюсь после запуска команды:
робот test.robot.txt
все работает отлично 🙂
Других решений пока нет …