Как мне указать скрипту Python (cygwin) работать в текущих (или относительных) каталогах?
-
12-09-2019 - |
Вопрос
У меня есть множество каталогов с текстовыми файлами, написанными с использованием (g)vim, и я написал несколько утилит, которые считаю полезными на Python.Я запускаю утилиты со строки python pound-bang-/usr/bin/env, чтобы использовать Python, установленный под cygwin.Я хотел бы ввести такие команды:
%cd ~/SomeBook
%который pythonUtil
/usr/local/bin/pythonUtil
%pythonUtil ./infile.txt ./outfile.txt
(или % pythonUtil someRelPath/infile.txt somePossibleDifferentRelPath/outfile.txt)
pythonUtil:Нашел infile.txt;Написание outfile.txt;Готово (или что-то в этом роде, если что)
Однако мои программы pythonUtil продолжают сообщать мне, что они не могут найти файл infile.txt.Если я скопирую утилиту в текущий рабочий каталог, все будет хорошо, но тогда копии моих утилит засорят весь ландшафт.Что мне делать?
Еще одно редактирование:Подводя итог: я хотел os.path.abspath('filename').Это вернет абсолютный путь в виде строки, а затем вся двусмысленность будет удалена.
НО:ЕСЛИ используемый Python установлен в cygwin, ТОГДА абсолютный путь будет относительным к CYGWIN, например /home/someUser/someDir/someFile.txt.ОДНАКО, ЕСЛИ Python был установлен под Windows (и здесь он вызывается из командной строки терминала cygwin), ТОГДА абсолютным путем будет полный путь Windows, начиная с «диска», например D:\cygwin\home\someUser. \someDir\someFile.txt.
Мораль:Не ожидайте, что cygwin Python сгенерирует полный Windows абсолютный путь для файла, не имеющего корневого каталога /;это за пределами горизонта событий.Однако вы можете обратиться к любому файлу в системе WinXP с помощью cygwin-python, если укажете путь к файлу, используя соглашение о вводе «/cygdrive/driveLetter».
Примечание:Не используйте '\' для разделителей в пути WinXP в командной строке cygwin;используйте '/' и доверьтесь змее.Понятия не имею, почему, но некоторые разделители могут быть удалены, а путь может быть изменен для включения дополнительных уровней, таких как «Документы и настройки\некоторый пользователь» и другой чепухи Windows.
Спасибо ответившим за то, что подтолкнули меня в правильном направлении.
Решение
Посмотрите os.getcwd:
Редактировать:Чтобы узнать относительные пути, взгляните на модуль os.path:
в частности, os.path.join и os.path.normpath.Например:
import os
print os.path.normpath(os.path.join(os.getcwd(), '../AnotherBook/Chap2.txt'))
Другие советы
Что происходит, когда вы вводите «ls»?Вы видите там «infile.txt»?
os.chdir(my_dir)
или
os.chdir(os.getcwd())