Посмотрите, каково значение __file__
. Он не содержит абсолютного пути к вашему сценарию, это значение из командной строки, поэтому это может быть что-то вроде «./myFile.py» или «myFile.py». Кроме того, realpath () не делает путь абсолютным, поэтому realpath ("myFile.py"), вызываемый в другом каталоге, будет по-прежнему возвращать "myFile.py".
Я думаю, вы должны сделать что-то вроде этого:
import os.path
script_dir = os.path.dirname(os.path.abspath(__file__))
target_dir = os.path.join(script_dir, '..', 'test')
print(os.getcwd())
os.chdir(target_dir)
print(os.getcwd())
os.chdir(script_dir)
print(os.getcwd())
На моем компьютере (Windows) результат такой:
e:\parser>c:\Python27\python.exe .\rp.py
e:\parser
e:\test
e:\parser
e:\parser>c:\Python27\python.exe ..\parser\rp.py
e:\parser
e:\test
e:\parser
Примечание: Если вам нужна совместимость (вам не нравятся странные ошибки пути), вам следует использовать os.path.join () всякий раз, когда вы объединяете пути.
Примечание: Я знаю, что мое решение очень простое (помните абсолютный путь), но иногда простейшие решения являются лучшими.