Как исправить рабочий каталог всегда дома? (Python) - PullRequest
2 голосов
/ 26 июня 2010

Это мой первый вопрос.

Мой скрипт на python открывается и читает из существующего текстового файла, используя следующую простую функцию:

open("config.ini", "r")

Поскольку это относительный путь, он должен работать, потому что config.ini находится в том же каталоге, что и скрипт, когда он запускается, это должен быть текущий рабочий каталог.

На самом деле это прекрасно работает на всех моих 3-х Linux-блоках, но у меня есть один пользователь, которому требуется поддержка, потому что он получает ошибку при открытии config.ini. Ошибка возникает из-за

os.path.exists("config.ini")

возвращает false, даже если файл есть!

Пытаясь решить эту проблему, мы обнаружили, что единственный способ заставить его работать - это поместить config.ini в его домашний каталог, несмотря на то, что предполагаемый рабочий каталог - другой.

Кроме того, если мой скрипт пытается создать файл в текущем рабочем каталоге, файл всегда создается в его домашнем каталоге, и поэтому я думаю, что по какой-то причине его рабочий каталог всегда дома!

Как я могу устранить эту проблему? Возможно, я мог бы ввести абсолютные пути, но я боюсь, что os.getcwd () вернет homedir вместо правильного.

Могу ли я предложить этому пользователю каким-либо образом починить свой компьютер?

Извините за этот длинный вопрос, но английский не мой родной язык, и я новичок в кодировании, поэтому есть некоторые трудности с объяснением.

Большое спасибо заранее! =)

Ответы [ 2 ]

5 голосов
/ 26 июня 2010

Может ли быть, что пользователь выполняет ваш скрипт из своего домашнего каталога?

Т.е. предположим, что скрипт находится в:

/home/user/test/foo/foo.py

Но пользователь вызываеттаким образом:

/home/user> python test/foo/foo.py

В этом случае «текущий каталог», который видит скрипт, /home/user.

Что вы можете сделать, это выяснить каталог, в котором находится сам скриптвызов этой функции:

import os

def script_dir():
    return os.path.dirname(os.path.realpath(__file__))

Он всегда будет возвращать каталог, в котором находится скрипт, а не текущий каталог, который может отличаться.Затем вы можете безопасно сохранить там свой файл конфигурации.

0 голосов
/ 26 июня 2010

В соответствии с предложением Эли Бендерского, вы можете попробовать:

os.path.exists(os.path.join(sys.path[0],"config.ini"))

, поскольку sys.path[0] всегда должен быть каталогом, в котором находится скрипт.

...