2011-03-28 13 views
5

El objetivo: Acceder/escribir a los mismos archivos temporales cuando se usa una función de utilidad común llamada desde varios módulos de python.¿Cómo puedo acceder a las rutas relativas en Python 2.7 cuando es importado por diferentes módulos?

Antecedentes: Estoy utilizando el módulo de unittest Python para ejecutar conjuntos de pruebas personalizadas que interactúan con la instrumentación a través de PySerial. Debido a que estoy usando el módulo unittest, no puedo pasar las variables requeridas, como qué puerto serie usar, en el caso de prueba de unittest. Para evitar esto, quiero crear un módulo que almacena y devuelve datos en escabeche. Me he encontrado con el problema de que cuando llamo a la función get_foo() desde test_case_1(), intenta cargar los datos conservados de la ruta relativa basada en test_case_1(), no el módulo real que contiene get_foo().

Vale la pena señalar que he contemplado el uso de variables globales, pero hay un puñado de datos que quiero retener desde la ejecución para ejecutar. Lo que significa que todos los módulos de Python se cerrarán y quiero volver a cargar los datos que se almacenaron en la ejecución anterior.

I en la pregunta de SO: Python - how to refer to relative paths of resources when working with code repository, pensé que encontré la solución en la primera respuesta. Para mi sorpresa, esto no funciona para mí en Python 2.7 (Debian)

¿Existe alguna forma confiable de devolver la ruta a un archivo específico cuando se llama desde diferentes módulos?

Respuesta

3

Probablemente usted sabe esto, pero aquí los fundamentos primero:

## file one: main.py, main program in your working directory 
# this code must run directly, not inside IDLE to get right directory name 
import os, mytest 
curdir=os.path.dirname(__file__) 
print '-'*10,'program','-'*10 
print 'Program in',curdir 
print 'Module is in', mytest.curdir 
print 'Config contents in module directory:\n',mytest.config() 
input('Push Enter') 

El módulo

## file two: mytest.py, module somewhere in PATH or PYTHONPATH 
import os 
curdir= os.path.dirname(__file__) 

print "Test module directory is "+curdir 

## function, not call to function 
config=open(os.path.join(curdir,'mycfg.cfg')).read 
""" Example output: 
Test module directory is D:\Python Projects 
---------- program ---------- 
Program in D:\test 
Module is in D:\Python Projects 
Config contents in module directory: 
[SECTIONTITLE] 
SETTING=12 

Push Enter 
"""" 
+0

Gracias por entrar en detalles en su ejemplo. Era lo que necesitaba para resolver mis problemas. Resulta que estaba usando el nombre dir incorrectamente en mis pruebas. ¿Puedes señalar la documentación donde se describe el nombre del directorio (__ archivo__)? No lo vi en python.org. –

+0

La documentación se puede encontrar en http://docs.python.org/library/os.path.html en el caso improbable de que no haya ayudado a archivar localmente. –

+0

Esta es en realidad la página que busqué tratando de encontrar documentación en el campo __file__ de la función dirname. ¿Algunas ideas? –

Cuestiones relacionadas