Начиная с ответа Амбер, я придумал этот код. Я не уверен, что он полностью устойчив, но пытается решить некоторые проблемы в оригинале (о которых я упомяну ниже).
import os
import sys
import tempfile
import contextlib
def is_case_sensitive(path):
with temp(path) as tmppath:
head, tail = os.path.split(tmppath)
testpath = os.path.join(head, tail.upper())
return not os.path.exists(testpath)
@contextlib.contextmanager
def temp(path):
tmphandle, tmppath = tempfile.mkstemp(dir=path)
os.close(tmphandle)
try:
yield tmppath
finally:
os.unlink(tmppath)
if __name__ == '__main__':
path = os.path.abspath(sys.argv[1])
print(path)
print('Case sensitive: ' + str(is_case_sensitive(path)))
Без указания параметра dir
в mkstemp
вопрос чувствительности к регистру неясен. Вы проверяете чувствительность к регистру, где бы ни находился временный каталог, но вы можете захотеть узнать о конкретном пути.
Если вы преобразуете полный путь, возвращаемый из mkstemp
, в верхний регистр, вы можете пропустить переход где-нибудь в пути. Например, у меня есть флешка в Linux, смонтированная с использованием vfat на /media/FLASH
. Проверка наличия чего-либо в /MEDIA/FLASH
всегда будет неудачной, поскольку /media
находится на (чувствительном к регистру) разделе ext4, но сама флешка не учитывает регистр. Установленные сетевые ресурсы могут быть другой ситуацией, подобной этой.
Наконец, и, возможно, само собой разумеется, в ответе Амбер вы захотите очистить временный файл, созданный mkstemp.