2014-09-24 4 views
0

я импортировал модуль, как:Python: Как получить абсолютный путь к файлу в импортируемом модуле

from source.x.ReviseOnOrder import reviseOnX, x 

Метод reviseOnX запускает другой питон скрипт, скажу y.py, который находится в том же месте, то есть /source/x. Итак, при выполнении reviseOnX я хотел бы узнать полный путь, чтобы я мог передать правильный путь к подпроцессу, который вызывает y.py.

Основываясь на других SO вопросы, я попытался следующие:

print os.path(source.x.ReviseOnOrder.__file__) 

Но это дает следующее сообщение об ошибке:

NameError: global name 'source' is not defined 

Как я могу найти правильный путь?

+1

Вам нужно «импортировать исходный код» –

+0

@PeterWood: 'TypeError: 'module' объект не вызываем' – nish

+1

@nish: вы имеете в виду вызов' os.path() '? Это неверно, так как 'os.path' является модулем. –

ответ

3

У вас есть только ссылки на объекты, импортированные из модуля, у вас нет самого объекта модуля.

inspect.getmodule() function Используйте, чтобы получить объект модуля снова:

import inspect 

mod = inspect.getmodule(reviseOnX) 
print os.path.abspath(mod.__file__) 

Обратите внимание, что я использую os.path.abspath(), неos.path(). Последний попытается вызвать модуль.

+0

Я получаю: 'TypeError: 'module' объект не вызываем' – nish

+0

@nish: где какой-либо модуль вызывается в моем ответе? Что * строка * выбрасывает это исключение для вас? –

+0

print os.path (mod .__ file__). Эта строка бросает ошибку – nish

Смежные вопросы