LINUX.ORG.RU

[EmbeddingPython] Не импортируется модуль


0

1

Доброго всем времени суток! Хочу попробовать встроить в свое приложение возможность выполнения скриптов на Python. Возникла проблема с импортом собственных модулей. Например, есть два файла main.cpp и script.py в одном каталоге.

script.py:

def func:
	print "Hello World"

main.cpp:

#include <Python.h>

int main()
{	
	PyObject *pname, *pmodule, *pfunc;	
	Py_Initialize();
	
	PyRun_SimpleString("import sys"); 
	PyRun_SimpleString("sys.path.append('.')");
	
	pname = PyString_FromString("script");	
	pmodule = PyImport_Import(pname);
	
	if (pmodule) {
		pfunc = PyObject_GetAttrString(pmodule, "func");
		PyObject_CallObject(pfunc, NULL);
	}
	
	Py_Finalize();
	return 0;
}

При выполнении программы функция PyImport_Import() возвращает 0, т.е. модуль не импортируется. Модули самого Python, например sys или os, импортируются нормально. Способ с включением текущего каталога в sys.path подсказал гугл, но он также не помогает.


Ответ на: комментарий от baverman

Что касается непосредственно script.py:

open("./script.py", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0775, st_size=49, ...}) = 0
open("./script.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
fstat64(3, {st_mode=S_IFREG|0775, st_size=49, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb770f000
read(3, "#/usr/bin/python\n\ndef func:\n\tpri"..., 4096) = 49
close(3)                                = 0
munmap(0xb770f000, 4096)                = 0

hippi90
() автор топика
Ответ на: комментарий от baverman

Чтобы больше не было таких досадных недоразумений, *всегда* обрабатывай ошибки:

#include <Python.h>

int main()
{	
	PyObject *pname, *pmodule, *pfunc;	
	Py_Initialize();
	
	pname = PyString_FromString("script");	
	pmodule = PyImport_Import(pname);
	
	if (pmodule) {
		pfunc = PyObject_GetAttrString(pmodule, "func");
		PyObject_CallObject(pfunc, NULL);
	} else {
		PyErr_Print();
	}
	
	Py_Finalize();
	return 0;
}
baverman
()
Ответ на: комментарий от baverman

Надо взять за правило не писать на форум по ночам, днем на свежую голову посмотрел, аж стыдно стало!) Но всё равно спасибо за помощь!

hippi90
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.