Как мне указать скрипту Python (cygwin) работать в текущих (или относительных) каталогах?

StackOverflow https://stackoverflow.com/questions/1117414

Вопрос

У меня есть множество каталогов с текстовыми файлами, написанными с использованием (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())
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top