2009-02-04 19 views
8

Jak zmienić katalog w katalog, w którym znajduje się mój skrypt Pythona? Do tej pory zorientowałem się, że powinienem używać os.chdir i sys.argv[0]. Jestem pewien, że istnieje lepszy sposób, aby napisać własną funkcję analizowania argv [0].Zmiana katalogu na katalog skryptu w języku Python

+0

Możesz bezpośrednio skopiować i wkleić to: 'import os; os.chdir (os.path.dirname (__ plik __)) ' – Basj

Odpowiedz

16
os.chdir(os.path.dirname(__file__)) 
+0

z jakiegokolwiek powodu __file__ to C: \ dev \ Python25 \ Lib \ idlelib, więc szybkie zastąpienie argv [0] rozwiązało to. +1 i sprawdź zaznaczone –

+1

Również, w zależności od platformy, możesz użyć 'os.path.abspath' na wyniku' os.path.dirname', aby upewnić się, że wszelkie dowiązania symboliczne lub inne przekierowania systemu plików zostały poprawnie rozwinięte. –

5

Czasami __file__ nie jest zdefiniowany, w tym przypadku można spróbować sys.path[0]

+1

@Miki - kiedy nie zdefiniowano "__file__"? –

+3

@RobBednark: 'python3.3 -c" print (__ plik __) "' –

+1

@JanusTroelsen: Dotyczy również Pythona 2.7. – George

4

os.chdir(os.path.dirname(os.path.abspath(__file__))) powinno wystarczyć.

os.chdir(os.path.dirname(__file__)) nie działa, jeśli skrypt jest uruchamiany z katalogu, w którym jest obecny.

+0

Działa również w celu napisania 'os.chdir (os.path.dirname (__ file__) lub '.')'. Problem w katalogu pojawia się, gdy '__file__' nie jest poprzedzony przedrostkiem'./'. 'os.path.dirname' zwraca pusty łańcuch w takim przypadku. – George

+0

Dobra obserwacja @George :) – iamas

0

w systemie operacyjnym Windows, jeśli zadzwonisz coś Pythona somefile.py ten os.chdir (os.path.dirname (__ FILE__)) rzuci WindowsError. Ale to powinno działać we wszystkich przypadkach:

import os 
absFilePath = os.path.abspath(__file__) 
os.chdir(os.path.dirname(absFilePath)) 
Powiązane problemy