2010-11-01 3 views
0

Когда я вызываю os.getcwd() на моем Mac под OS X 10.6.4 из моего домашнего каталога, путь преобразуется в нижний регистр. Я получаюКак я могу получить правильный случай при вызове os.getcwd() Python?

/пользователи/MyUserName

вместо

/Пользователи/MyUserName

На другой Mac я получаю правильный заглавную строку. Как я могу настроить это? Есть ли (скрытая) настройка Python?

Причина: В ОС X все пользовательские каталоги находятся в «/ Users». Это всегда в верхнем регистре. При использовании Mercurial его иногда путают с этой странной и неправильной нормализацией моего текущего каталога.

В ответ на предлагаемые решения:

(1) DiskUtil говорит, что мой диск имеет формат "Mac OS Extended (журнальный)". Я купил свой компьютер месяц назад, и он по-прежнему является оригинальным диском, никогда не переформатировался.

(2) другой питон журнал консоли сеанса:

$ >>> os.system ('PWD')

/Пользователи/Клаас

$ >>> os.getcwd()»

'/ пользователи/Клаас'

$ >>> os.path.normcase ('/ Users/Клаас')

'/ Users/Клаас'

$ >>> os.chdir ('/ Users/Клаас')

$ >>> os.getcwd()

«/ пользователей/Клаас

$ >>> os.chdir ('/ Users/Клаас')

$ >>> os.getcwd()

'/ пользователей/Клаас'

Update 2:

Спасибо за все ответы. Я создал тестовый случай в Objective-C, и она имеет ту же строчную имя папки:

NSFileManager *filemgr; 
NSString *currentpath; 

filemgr = [NSFileManager defaultManager]; 

currentpath = [filemgr currentDirectoryPath]; 

NSLog (@"Current directory is %@", currentpath); 
+0

Установили ли вы еще один python (через 'macports' или' fink')? Какая версия сообщает Python при запуске с консоли? Моя система 'Python 2.6.1 (r261: 67515, 11 февраля 2010, 00:51:29) - [GCC 4.2.1 (Apple Inc. build 5646)] на darwin' отлично работает ... – ChristopheD

+0

Являются ли хосты одинаковыми OS и с использованием той же файловой системы? –

+0

Попробуйте запустить скрипт с os.getcwd с помощью «dtruss». По крайней мере, вы можете увидеть, что ОС вернет для каталога. –

ответ

0

В конце концов, это была проблема с установкой Mercurial. Я снова столкнулся с этим вечером.

https://www.mercurial-scm.org/wiki/Download дает вам различные варианты установки Mercurial. Если я выберу первый (пакеты Mac OS X), каталог «/ Users» будет отображаться как «/ users» (даже при доступе к нему с Objective C). Это можно решить, установив Mercurial через опцию macports. Это исправляет проблему, и каталог «/ Users» возвращается снова с прописным «U».

Любые намеки на то, почему это происходит, по-прежнему приветствуются.

Но, по крайней мере, есть решение.

0

Проблема, кажется, проблема с вашей конкретной Python установить на конкретном компьютере. Я не смог привлечь кого-то другого, у кого такая же проблема.

Вероятно, ваш Mac имеет проблемы с установкой Python. AFAIK, нет опции конфигурации, чтобы Python представлял getcwd() с надлежащим случаем (это поведение должно быть включено по умолчанию). Если это вариант, я бы попробовал переустановить Python.Если это не сработает, вы должны сообщить об ошибке в Python bug tracker.

+1

Ошибка Python, вызывающая его как-то строчное значение возвращаемого значения 'getcwd'? Это не кажется очень вероятным - если у вас нет фактических доказательств этого, предлагая переустановить Python, похоже, бросать дротики, которые будут тратить свое время. –

+0

@GlennMaynard кажется, что у него может быть проблема с его установкой Python, учитывая, что он не может воспроизвести проблему на другой машине. Это может быть файловая система, но я столкнулся с подобными идиосинкратиями с установками Python, которые были решены путем переустановки. –

+0

Даже в нечетном случае, где он находится, он должен понять, что не так, поэтому он может сообщить об ошибке, а не бульдозером над проблемой и оставить ее загадкой для следующего человека. Однако в модулях/posixmodule.c ничего не происходит, что изменяет результат 'getcwd'. –

0

Два необразованные догадок:

Во-первых, по-видимому, OSX, как правило, не чувствительны к регистру, что обычно означает случай, сохраняющих: имя текущего каталога либо приходит от того, как он капитализируется на диске, или, как это было капитализируются, когда вы изменили его. Если вы запустите 10, показывает ли он его внизу или нет? Если это так, то это то, что сообщает ОС, и Python не делает ничего плохого. Изменится ли это, если вы сначала нажмете os.chdir('/UsErS/username')?

Во-вторых, есть одна функция, которая делает строчные буквы или не выборочно на основе ОС: os.path.normcase. Версия macpath имеет строчные буквы. Я уверен, что os.getcwd делает не автоматически запускает результаты через это; просто отметив это как место для проверки.

+0

(«Обычно», потому что, по-видимому, HFS + может быть настроен на чувствительность к регистру или нет, я предполагаю, что это обычно так: http://bugs.python.org/issue3485. Кроме того, я не знаю, является ли «macpath» для OSX или если он задерживается в MacOS cruft, а если последний, то эта часть, вероятно, не имеет значения.) –

+0

Да, «macpath» для MacOS; игнорировать это. –

+0

DiskUtil говорит, что мой диск имеет формат «Mac OS Extended (Journaled)». Я купил свой компьютер месяц назад, и он по-прежнему является оригинальным диском, никогда не переформатировался. – Klaas

2

Файловая система «HFS plus», которая является файловой системой Apple с момента выхода Mac OS 8, обычно не чувствительна к регистру.

Mac OS X версии 10.4 или «Тигр», поскольку он более известен, представил возможность создания файловой системы HFS plus с учетом регистра.

Может ли один из них использовать чувствительный к регистру FS?

Смежные вопросы