Tag: python 2.7

如何从Python访问C全局变量?

你有一个用SWIG( http://swig.org/ )编写的python模块,名为“swigMod1”,以及.i扩展名文件中名为“int A1 = 0;”的全局C变量。 在python环境下键入“import swigMod1”和“swigMod1.cvar.A1”,导入新扩展并允许您在执行期间读取和修改A1。 如果您运行两个swig模块,则语法如“swigMod1.cvar.A1 = swigMod2.cvar.A2”将变量A1(在第一个模块中)复制到A2(在第二个模块中)。 这是我项目中非常有用的function,我想在下一个考虑的案例中保留它。 您现在有另一个名为“cMod”的扩展,这次是通过经典的C API编写的( https://docs.python.org/2.7/extending/extending.html# )。 在源代码中再次出现一个C全局变量(“int B = 1;”),并且您希望像之前的示例一样访问它,但输入“cMod.cvar.B” 不起作用,因为它只是SWIGfunction。 是否有可能获得像“cMod.cvar.B”和“swigModule.cvar.A1 = cMod.cvar.B”这样的结果? 请注意我是如何仅仅为了简单而声明整数,但在实践中我面对其他类型,我想找到一个通用的解决方案。 我也省略了正确的检查以避免不良影响。

从C调用python hello world函数,解析字符串参数

我使用此答案中的代码创建以下文件 callpython.c #include int main(int argc, char *argv[]) { PyObject *pName, *pModule, *pDict, *pFunc; PyObject *pArgs, *pValue; int i; if (argc < 3) { fprintf(stderr,"Usage: call pythonfile funcname [args]\n"); return 1; } Py_Initialize(); pName = PyString_FromString(argv[1]); /* Error checking of pName left out */ //fprintf(stderr,"pName is %s\n", pName); PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append(\".\")"); //PySys_SetArgv(argc, argv); pModule = […]

无法建立netifaces

我正在尝试为windows构建python netifaces。 我正在使用microsoft visual c ++ express 2010版。 当我运行命令python setup.py install时,我得到以下日志和错误: running install running bdist_egg running egg_info writing netifaces.egg-info\PKG-INFO writing top-level names to netifaces.egg-info\top_level.txt writing dependency_links to netifaces.egg-info\dependency_links.txt reading manifest file ‘netifaces.egg-info\SOURCES.txt’ writing manifest file ‘netifaces.egg-info\SOURCES.txt’ installing library code to build\bdist.win32\egg running install_lib running build_ext building ‘netifaces’ extension c:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\cl.exe /c /nologo […]

使用Python C API调用C函数两次时的分段错误

最近我想使用C包装器从Fortran调用Python(见这里 )。 下面我发布一个更简单的例子。 函数的第二次调用导致pModule = PyImport_Import(pName)处的分段错误。 我发现问题是from scipy.optimize import newton线 – 如果我评论它一切正常。 任何想法如何解决它? rootC.c #include “rootC.h” #include void root_(double* A, double* B, double* t, double* x) { PyObject *pName, *pModule, *pFunc; PyObject *pArgs, *pValue, *sys, *path; Py_Initialize(); sys = PyImport_ImportModule(“sys”); path = PyObject_GetAttrString(sys, “path”); PyList_Append(path, PyString_FromString(“.”)); pName = PyString_FromString(“rootPY”); pModule = PyImport_Import(pName); if (!pModule) { […]

用C加密/解密加密Python脚本

重复(我没有找到答案): https : //stackoverflow.com/questions/4066361/how-to-obfuscate-python-code 如何保护Python代码? 所以我查看了^^上面的两个链接,我发现没有什么用于实际加密python脚本和/或混淆python代码。 所以我是C的新手,但是在python中经验丰富,如果我想开发商业python项目,我最好的想法是: 创建ac脚本和加密和编译的python脚本 C脚本需要简单地提供字符串加密密钥并对其进行解密。 仅仅是因为我从未真正尝试加密,我知道这不会是完美的。 但我不需要完美。 我只是想让我的python源代码反编译更难,意识到这仍然很容易但不容易。 我目前看过Cython,我可以轻松生成一个* .c文件,现在如何将其编译为二进制文件? (与视觉工作室) 那么我怎样才能加密我的python代码并从C脚本解密它(我可以编译成二进制代码使其编辑起来更加困难)?

Python扩展:找不到架构x86_64错误的符号

我想在c中写一个python扩展。 我在Mac上工作,我从这里拿了一个代码: #include static PyObject* say_hello(PyObject* self, PyObject* args) { const char* name; if (!PyArg_ParseTuple(args, “s”, &name)) return NULL; printf(“Hello %s!\n”, name); Py_RETURN_NONE; } static PyMethodDef HelloMethods[] = { {“say_hello”, say_hello, METH_VARARGS, “Greet somebody.”}, {NULL, NULL, 0, NULL} }; PyMODINIT_FUNC inithello(void) { (void) Py_InitModule(“hello”, HelloMethods); } 我编译它: gcc -c -o py_module.o py_module.c -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/ gcc -o […]

(ctypes)msvcrt.printf并在python中打印

我正在学习使用msvcrt.dll,python 2.7中的ctypes使用printf函数。 我观察到当使用msvcrt.printf(“x”)和通常的python print(“y”)函数时,“y”在“x”之前打印,而在“msvcret.printf”之后放置print(“y”)语句。 “X”) 。 任何人都可以解释为什么会这样吗? 这是我的代码: from ctypes import * msvcrt = cdll.msvcrt msvcrt.printf(“hello world!”) print(“abcd”) 输出: abcd hello world

在GCC 4.8上构建Python(2.7)模块失败

我正在尝试使用C API构建Python模块/扩展写入,但它失败了: % python2 cmath.py build running build running build_ext building ‘c_math’ extension creating build creating build/temp.linux-x86_64-2.7 gcc -pthread -fno-strict-aliasing -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector –param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -DNDEBUG -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector –param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python2.7 -c c_math.c -o build/temp.linux-x86_64-2.7/c_math.o c_math.c:18:5: warning: initialization from incompatible pointer type [enabled by default] {“more”, c_math_more, METH_VARARGS, “n […]

在Python中调用C函数并返回2个值

我试图弄清楚如何从我在python中调用的C函数返回2个值。 我已经在线阅读了材料,并使用struct输出两个变量。 当我在同一个C文件中调用此函数时,我能够输出变量。 但是,当我尝试在python中调用它时,它仍然只返回一个值。 这是我的C代码: struct re_val { double predict_label; double prob_estimates; }; struct re_val c_func(const char* dir, double a, double b, double c, double d ) { double x[] = {a,b,c,d}; printf (“x[0].index: %d \n”, 1); printf (“x[0].value: %f \n”, x[0]); printf (“x[1].index: %d \n”, 2); printf (“x[1].value: %f \n”, x[1]); printf (“x[2].index: %d […]

Python ctypes:在c中调用具有自定义类型的函数

我正在尝试将预先存在的c代码包装在Linux中用于Python。 我对c的经验不多,而且我正在使用ctypes解决这个问题。 我的C函数需要一个带有自定义类型条目的二维数组,我不知道如何在python中重新创建它以将其传递给c函数。 这是我试图调用的函数: void usbBuildGainTableAI_USB1808(libusb_device_handle *udev, Calibration_AIN table[NCHAN_1808][NGAINS_1808]) { int i, j; uint16_t address = 0x7000; // base address of ADC calibration coefficients. for (i = 0; i < NCHAN_1808; i++) { for (j = 0; j < NGAINS_1808; j++) { usbMemAddressW_USB1808(udev, address); usbMemoryR_USB1808(udev, (uint8_t *) &table[i][j].slope, sizeof(float)); address += 4; usbMemAddressW_USB1808(udev, address); usbMemoryR_USB1808(udev, […]