2015-12-14 70 views
1

我用Python编写的测试脚本使用ctypes的ctypes - Beginnerctypes的Python的动态函数调用

我有一个函数列表和相应的共享对象名称来调用C函数,需要调用这些函数动态使用python脚本。

虽然我用它直接调用Python脚本中的函数名称,但它工作得很好,并在终端上打印“hello world”!

的Python脚本:

import ctypes 
import os 

sharedObjectPath = (os.getcwd() + "/" + "sharedObject.so") 

test = ctypes.CDLL(sharedObjectPath) 
test.printHello() 

的C代码:

#include < stdio.h> 

void printHello(void); 

void printHello() 
{ 
    printf("hello world\n"); 
} 

然而,它试图使用一个变量来加载函数名引发错误

Python脚本:(动态函数调用)

import ctypes 
import os 

sharedObjectPath = (os.getcwd() + "/" + "sharedObject.so") 

test = ctypes.CDLL(sharedObjectPath) 
fName = "printHello()" 
test.fName 

错误: “完整路径” /sharedObject.so:未定义的符号:FNAME

任何帮助和建议深表感谢!谢谢!

回答

1

要使用它的名字作为一个字符串调用的函数,你这能做到这一点

...  
fName = "printHello" 
test[fName]() 

所以函数名(减去())被用于索引模块对象后,它的调用。

+0

非常感谢保罗,它解决了这个问题!感谢您的帮助 – cas

+0

没有probs。如果你愿意,随时接受&upvote。 –