2009-05-09 12 views
5

Podczas pisania skryptu w języku Python, który można wykonać w różnych środowiskach systemu operacyjnego (Windows/* nix), jakie są dobre sposoby na ustawienie ścieżki ? W poniższym przykładzie chciałbym, aby pliki logów były przechowywane w folderze logów w bieżącym katalogu. Czy jest to akceptowalne podejście (jestem raczej nowy w Pythonie) lub czy istnieją lepsze sposoby osiągnięcia tego? DziękiJakie są dobre sposoby ustawiania ścieżki w obsługiwanym przez wiele systemów operacyjnych skrypcie Python

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

Należy zauważyć, że systemy operacyjne MS od dłuższego czasu zaakceptowały ukośnik jako separator ścieżek (to muszle wiersza poleceń, które go wydały). "/" działa również na OS X. Nie wiem o OpenVMS. Najbardziej przenośne podejście jest tym, o czym wspomina Ryan, które będzie działać na wszystkich systemach operacyjnych. – outis

Odpowiedz

8

Zdecydowanie spojrzeć na os.path. Zawiera wiele "bezpiecznych" funkcji manipulacji ścieżką między systemami operacyjnymi, których potrzebujesz. Na przykład, zawsze odbywa się to w scenariuszu jesteś przedstawiając:

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

Należy również pamiętać, że jeśli chcesz dostać separator ścieżki, można użyć:

os.path.sep 

to przyniesie "\\" w systemie Windows i "/" w systemie Linux, na przykład.

+0

Dzięki Ryan. Na podstawie Twojej porady otrzymałem następujące informacje: os.path.join (os.path.abspath (os.path.dirname (__ scriptname__)), 'logs') + (os.sep) To spowodowało właściwą ścieżkę z poprawnym ukośnikiem na końcu ścieżki. – Shaun

+0

Cieszę się, że mogę Ci pomóc! :-) –

2

Po pierwsze, zawsze używaj os.path do manipulacji ścieżką.

Co ważniejsze, wszystkie ścieżki powinny znajdować się w plikach konfiguracyjnych.

Do rejestrowania użyj funkcji fileConfig.

Dla wszystkich pozostałych elementów należy mieć plik konfiguracyjny lub parametr wiersza poleceń lub zmienną środowiskową.

Powiązane problemy