我为我的项目开发了C ++ API。还从这里创建了一个linux .so共享库。我需要使用机器人框架关键字来调用这些API。
提前致谢。
答案 0 :(得分:0)
可以使用python库 ctypes 轻松调用C ++ API。您可能已经知道python库可以集成到机器人框架中。
假设你必须使用机器人框架调用SendMesg C ++ API。 请按照以下步骤操作:
<强> 1。创建C ++ API库.so文件
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
现在,您已在与cpp文件相同的路径中创建了connect.so共享库。
<强> 2。为C ++ API创建python包装器
connectWrapper.py
导入ctypes
class 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)
创建python包装器API时要记住的4件事。
a)python文件名与类名
相同b)使用ctypes调用API时,应始终指定输入参数类型。否则,使用此python库运行robot文件时可能会出现以下错误:
NotImplementedError:尚不支持可变参数函数;指定一个 参数列表
在这种情况下,我们为字符串类型指定了参数ctypes.c_char_p,为整数指定了ctypes.c_int。有关更多信息,请使用以下:
c)connect.so的绝对路径在ctypes.cdll.LoadLibrary API中给出。
d)使用chmod + x connectWrapper.py
将python文件设置为可执行文件第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
一切正常:)