我可以成功地进行编译并打印出值,只需要进行一些修改:
#include <Python.h>
#include <stdio.h>
int
main (int argc, char *argv[])
{
PyObject *pName, *pModule, *pFunc;
PyObject *pValue;
Py_Initialize ();
pName = PyUnicode_FromString ("uuid");
pModule = PyImport_Import (pName);
Py_DECREF (pName);
pFunc = PyObject_GetAttrString (pModule, "uuid4");
pValue = PyObject_CallObject (pFunc, NULL);
PyObject_Print(pValue, stdout, Py_PRINT_RAW);
printf ("\n");
Py_Finalize ();
return 0;
}
以下是输出结果:
$ ./a.out
bd94cb52-9278-41a8-bc5a-ad05eff91188
我认为你的问题最有可能是这个原因:编译Python的编译器与你用来编译测试程序
test.c
的编译器不同。你可以找到正确版本的gcc来编译你的代码,或者简单地使用当前的gcc编译器重新编译Python3.4。
至于你原始版本的
test.c
,在我的MBP上会出现这个错误:
$ ./a.out
(null)
Exception ignored in: <module 'threading' from '/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py'>
Traceback (most recent call last):
File "/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py", line 1292, in _shutdown
t = _pickSomeNonDaemonThread()
File "/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py", line 1299, in _pickSomeNonDaemonThread
for t in enumerate():
File "/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py", line 1269, in enumerate
return list(_active.values()) + list(_limbo.values())
TypeError: bad argument type for built-in operation
我真的不知道发生了什么。
#include
int main(int argc, char *argv[])
{
PyObject *pModule;
PyObject *pValue;
Py_Initialize();
pModule = PyImport_AddModule("__main__");
PyRun_SimpleString("x = \"hello world\"");
pValue = PyObject_GetAttrString(pModule, "x");
printf("%s\n", PyUnicode_AsUTF8(pValue));
Py_Finalize();
return 0;
}
- Henry Wong