Почему WPFApp меняет «.»дорожка? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть проект Python в D: / program / python / test_project /. И в каталоге есть сценарий ввода с именем 'start.py'. Он использует относительный путь, например './pictures/icons/pic.png', для индексации других файлов в этом проекте.

Все работает нормально, пока яиспользуйте проект CSharp для запуска проекта python, и он выбрасывает путь Exception Error. Я печатаю «os.path.abspath ('.')» и он ссылается на путь «WPFApp \ bin \ Debug». WPF является корневымкаталог моего проекта CSharp.

Почему это происходит? Почему '.'которые представляют текущее изменение каталога?

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

При запуске приложения через IDE вы не можете полагаться на текущий каталог (в отличие от запуска, например, с помощью файла .bat).

Если вам нужны файлы ресурсов, расположенные относительнок основному сценарию вы не можете использовать относительные пути.

Вы можете использовать __file__, который предоставляет полный путь к текущему сценарию Python, поэтому

os.path.join(os.path.dirname(__file__),'pictures/icons/pic.png')

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

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

os.chdir(os.path.abspath(os.path.dirname(__file__)))

(добавлено abspath, как будто __file__ возвращает имя файла, dirname возвращает пустую строку и chdir не удается)

2 голосов
/ 31 октября 2019

os.path.abspath('.') дает вам текущий рабочий каталог вашего скрипта Python. Когда вы запускаете этот скрипт из контекста вашего приложения WPF, это то, что используется в качестве рабочего каталога.

Чтобы найти путь к файлу вашего скрипта, взгляните на следующий вопрос: Как правильноопределить текущий каталог скриптов? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...