Многие ответы здесь стали несколько устаревшими, поэтому здесь приводится краткое резюме того, что произошло с атрибутом scoped
.
Первоначально (до HTML5), не был «допустимым» за пределами
, но поддерживался большинством или всеми браузерами. «не действителен» означает, что валидаторы будут жаловаться на это, а в спецификациях (серии W3C HTML 4 и XHTML 1) сказано, что этого делать не следует Но это сработало. И иногда это было плохо: независимо от того, где элемент
появился в документе, его правила будут применяться ко всему документу (конечно, на основе используемых селекторов). Это может привести к тому, что авторы напишут «локальную» таблицу стилей, предназначенную для применения только в пределах области документа, но могут случайно переопределить другие области.
Предложение атрибута HTML5 scoped
предназначалось для решения этой проблемы: оно сообщало бы браузеру, что стили в этом листе будут применяться только к родительскому элементу и его потомкам. Кроме того, в какой-то момент
также требовалось быть первым дочерним элементом своего родителя, чтобы всем, читающим код HTML, было совершенно ясно, какова область действия. Элемент
style
без атрибута остается действительным только внутри элемента .
Прошло время, и недостаточно продавцов внедрили новую функцию (Firefox и Chrome включали некоторую экспериментальную поддержку), поэтому она была в конечном итоге отброшена. Поведение браузера остается таким же, каким оно было до HTML 5, но текущая спецификация, по крайней мере, документирует его: теперь допустима / действительна для всего документа, но спецификация предупреждает о возможных побочных эффектах (случайный рестайлинг элементов).
С текущими спецификациями и поведением браузера лучший и безопасный способ реализации стилей «scoped» - это делать это явно с помощью идентификаторов, как в следующем фрагменте:
Some content here...
The div
имеет атрибут id
, и все правила в таблице стилей явно используют селектор идентификатора, чтобы гарантировать, что они применяются только в этом div. Конечно, это все еще требует, чтобы избежать столкновения идентификаторов в документе, но уникальность уже является требованием атрибута id
.
Хотя атрибут scoped
был отброшен, этот подход выполняет свою работу, является достаточно читабельным (конечно, как и любой код, он может быть запутан, но не в этом суть), должен проверяться и должен работать на довольно много каждого CSS-совместимого браузера.
PS: Согласно спецификации, в пределах
должно быть подтверждено. Однако валидатор Nu (помеченный как экспериментальный) по-прежнему жалуется на это. По этому вопросу существует открытый вопрос: https://github.com/validator/validator/issues/489
У меня также были проблемы с использованием smbfs (случайные блокировки и перезагрузки системы), и мне требовался быстрый ответ.
Я также попробовал модуль smbc
, но не смог получить с его помощью никаких данных. Я дошел до структуры каталогов, как и вы.
Время истекло, и мне нужно было доставить код, поэтому я воспользовался сокращением:
Я написал небольшую оболочку для вызова « smbclient
». Это уродливый хак, действительно уродливый , но он работает для моих нужд. Он используется в производстве в компании, в которой я работаю.
Вот несколько примеров использования:
>>> smb = smbclient.SambaClient(server="MYSERVER", share="MYSHARE",
username='foo', password='bar', domain='baz')
>>> print smb.listdir(u"/")
[u'file1.txt', u'file2.txt']
>>> f = smb.open('/file1.txt')
>>> data = f.read()
>>> f.close()
>>> smb.rename(u'/file1.txt', u'/file1.old')
Программист до меня использовал файл "bash" с множеством вызовов smbclient, так что я думаю, что мое решение по крайней мере лучше.
Я загрузил его сюда , так что вы можете использовать его, если хотите. Репозиторий Bitbucket находится здесь . Если вы найдете лучшее решение, сообщите мне, и я тоже заменю свой код.
Я бы предпочел smbfs. Это лишь вопрос времени, когда вы захотите получить доступ к этим общим файлам с помощью чего-то другого, кроме Python.