У меня есть модуль Python, скажем, Module.py, который имеет несколько функций, как показано ниже.
"""module.py"""
class myclass:
def foo(self, arg1: str, arg2: int) -> int:
print(f"foo called with args - {arg1}, {arg2}")
return arg2;
На данный момент я могу запустить скрипт Python в целом в некоторой степени. Но я хочу вызвать foo() из функции CAPL, которая выглядит, как показано ниже.
variables
{
int return_value;
}
void GetFooResult()
{
//insert call to python function here and get the return_value
write(return_value);
}
Есть ли способ добиться этого? Я не против, если это сложно, но мне нужны некоторые уточнения, поскольку я новичок в CANoe.
Спасибо за указание на решение. Однако эти ссылки обеспечивают интеграцию CAPL-to-C и C-to-Python изолированно. Я ищу демонстрацию CAPL-to-Python, которая работает для моего примера.
Попробуйте реализовать прототип (возможно, не работающий), проведите предварительную отладку и задайте конкретный вопрос с минимально воспроизводимым примером. SO не является бесплатной службой кодирования.
Как было предложено в комментариях (хотя они и были резкими, они помогли мне начать работу, так что переход на SO в конце концов не был пустой тратой!) Решением является создание и использование DLL CAPL-to-C-to-Python. Мы могли бы использовать C++ или любой другой поддерживаемый язык вместо C, но встраивание Python в C хорошо документировано.
Ниже приведена процедура:
Ссылка из комментариев для встраивания Python
#include <Python.h>
int32_t CAPLEXPORT CAPLPASCAL capl_foo() {
//Python embedding done here
}
Ссылка из комментариев для экспорта функций
{"my_foo", (CAPL_FARCALL)capl_foo, "CAPL_DLL", "Python calls", 'L', 0, "", "", {""}},
on key 'p'
{
int result;
result = my_foo();
writeLineEx(1,1,"");
write("Result is %d", result);
}
[I] [Program / Model] Use the keyboard to control the program
[I] [Program / Model] <1> Direct call of a CAPL Callback function
...
[I] [Program / Model] <p> Run Py foo
[I] [Program / Model] <h> Help
[I] [Program / Model] --------------------------------------------------------------
[*] [Program / Model] Result is 42
[I] [Program / Model]
[*] [Program / Model] Result is 42
[I] [Program / Model]
Проведите предварительное исследование. Создайте DLL на C и вызовите ее из модуля CAPL. См. этот вопрос и Встраивание Python в другое приложение.