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 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.