2009-05-09 9 views
5

Al escribir una secuencia de comandos de Python que se puede ejecutar en diferentes entornos de sistema operativo (Windows/* nix), ¿cuáles son algunas buenas maneras de establecer una ruta ? En el siguiente ejemplo, me gustaría tener los archivos de registro almacenados en la carpeta de registros bajo el directorio actual. ¿Es este un enfoque aceptable (soy bastante nuevo en Python) o hay mejores formas de lograrlo? Gracias¿Cuáles son algunas buenas maneras de establecer una ruta en una secuencia de comandos de Python compatible con Multi-OS

if os.name == 'nt': 
    logdir=('%s\\logs\\') % (os.getcwd()) 
else: 
    logdir=('%s/logs/') % (os.getcwd()) 

logging.basicConfig(level=logging.INFO, 
    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
    datefmt='%m-%d-%y %H:%M:%S', 
    filename='%slogfile.log' % (logdir), 
    filemode='a') 
+1

Tenga en cuenta que los sistemas operativos MS han aceptado la barra inclinada como un separador de ruta durante mucho tiempo (son los shells de línea de comandos que se han emitido con ella). "/" también funciona en OS X. No sé sobre OpenVMS. El enfoque más portátil es lo que Ryan menciona, que funcionará en todos los sistemas operativos. – outis

Respuesta

8

Definitivamente echa un vistazo a os.path. Contiene muchas de las funciones de manipulación de ruta de sistema operativo cruzadas "seguras" que necesita. Por ejemplo, siempre he hecho esto en el escenario que está delineando:

os.path.join(os.path.abspath(os.path.dirname(__file__)), 'logs') 

También tenga en cuenta que si se desea obtener el separador de ruta, puede utilizar:

os.path.sep 

Esto producirá '\\' en Windows y '/' en Linux, por ejemplo.

+0

Gracias Ryan. Terminé con lo siguiente según su consejo: os.path.join (os.path.abspath (os.path.dirname (__ scriptname__)), 'logs') + (os.sep) Esto produjo el ruta correcta con la barra correcta al final del camino. – Shaun

+0

¡Me alegra ayudar! :-) –

2

Primero, utilice siempre os.path para la manipulación de rutas.

Más importante aún, todas las rutas se deben proporcionar en los archivos de configuración.

Para el registro, use la función fileConfig.

Para todo lo demás, asegúrese de tener un archivo de configuración o un parámetro de línea de comandos o una variable de entorno.

Cuestiones relacionadas