Para ayudar a entender por qué este comportamiento sorprendente no es del todo terribles, considere una aplicación que acepta un nombre de archivo de configuración como argumento:
config_root = "/etc/myapp.conf/"
file_name = os.path.join(config_root, sys.argv[1])
Si la aplicación se ejecuta con:
$ myapp foo.conf
Se usará el archivo de configuración /etc/myapp.conf/foo.conf
.
Pero considere lo que sucede si la aplicación se llama con:
$ myapp /some/path/bar.conf
Entonces myapp
debe utilizar el archivo config en /some/path/bar.conf
(y no /etc/myapp.conf/some/path/bar.conf
o similar).
Puede que no sea genial, pero creo que esta es la motivación para el comportamiento de ruta absoluta.
-1: ** La cadena "No" debe incluir un "/". Un punto completo de os.path.join es evitar colocar barras en el camino. –
esto no es genial. si explícitamente solicito unirme a esas rutas (o cadenas), hazlo si hay un '/' inicial o no en esa ruta/cadena. – aschmid00
si quieres eso, solo usa str.join(), esto es os.path y por lo tanto es consistente con su semántica de paquete. – marcorossi