私のCスクリプトからPython関数を呼び出そうとしています。私はPython関数から二重変数を返し、私のCスクリプトでそれを表示することに成功しました。私が今問題としているのは、Pythonから複数の変数(タプル)を返す必要があるということです。どうすれば成功するのですか?次のように単一の変数のリターンと私のコードは次のとおりです。タプルを含むPythonからの関数呼び出しがCで返される
#include <python2.7/Python.h>
int main(){
PyObject *pName, *pModule, *pDict, *pFunc;
PyObject *pArgs, *pValue;
int i;
double read;
Py_Initialize();
PyObject* sysPath = PySys_GetObject((char*)"path");
PyList_Append(sysPath, PyString_FromString("."));
pName = PyString_FromString("eadata"); //Primer posible error
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if(pModule != NULL){
pFunc = PyObject_GetAttrString(pModule,"lectura");
if(pFunc && PyCallable_Check(pFunc)){
pValue = PyObject_CallObject(pFunc,NULL);
if(pValue != NULL){
printf("Result of call: %lf \n", PyFloat_AsDouble(pValue));
Py_DECREF(pValue);
}
else{
Py_DECREF(pFunc);
Py_DECREF(pModule);
PyErr_Print();
fprintf(stderr,"Call failed\n");
return 1;
}
}
}
else{
PyErr_Print();
fprintf(stderr, "Error al cargar eadata.py \n");
}
}
私のPythonスクリプトは次のとおりです。
def lectura():
device = '/dev/ttyUSB0'
baudrate = 115200
mt=mtdevice1.MTDevice(device, baudrate)
ax=mtdevice1.acx
ay=mtdevice1.acy
az=mtdevice1.acz
wx=mtdevice1.wx
wy=mtdevice1.wy
wz=mtdevice1.wz
mx=mtdevice1.mx
my=mtdevice1.my
mz=mtdevice1.mz
roll = mtdevice1.roll
pitch = mtdevice1.pitch
yaw = mtdevice1.yaw
pc = mtdevice1.pc
return ax
、これは動作しますが、私は、このようなAY、AZと同時に、他の変数を返すようにしたいです等々。私の初めての組み込みPythonを使用していると私は本当にこれを行う方法を知らない。
おそらく_ [このディスカッション](http://stackoverflow.com/a/13942236/645128)_手がかりを提供しますか? – ryyker
または_ [この1つ](http://stackoverflow.com/questions/29929920/how-to-pass-a-list-array-of-structs-from-python-to-c)_ – ryyker