Вышеуказанные ответы, по-видимому, не обрабатывают отрицательных значений временной шкалы (как, например, получается из pytz для часовых поясов, «оставленных» от UTC). Как указано в документации , объекты timedelta нормализованы, а отрицательная timedelta представлена отрицательным атрибутом экземпляра day
. Из документации:
Обратите внимание, что нормализация отрицательных значений может сначала удивить.
и
Строковые представления объектов timedelta нормализуются аналогично их внутреннему представлению. Это приводит к несколько необычным результатам для отрицательных timedeltas.
Например:
>>> td = timedelta(seconds=-30)
>>> str(td)
'-1 day, 23:59:30'
>>> repr(td)
'datetime.timedelta(-1, 86370)'
Учитывая этот пример timedelta, оба принятого ответа Шона Чина и ответа Гумпшена возвращают '23:59:30'
, и ответ mpounsett '-1:59:30'
.
Я думаю, что для того, чтобы печатать как отрицательные, так и положительные временные интервалы более читабельным образом, нам нужно явно обработать знак и абсолютное значение объекта часового пояса: строковое представление:
>>> strfdelta(td, "%s%H:%M:%S") # Note that %s refers to the timedelta’s sign.
'-00:00:30'
>>> strfdelta(timedelta(days=-1), "%s%D %H:%M:%S")
'-1 00:00:00'
>>> strfdelta(timedelta(days=-1, minutes=5), "%s%D %H:%M:%S")
'-0 23:55:00'
>>> strfdelta(timedelta(days=-1, minutes=-5), "%s%D %H:%M:%S")
'-1 00:05:00'
… или в более практическом контексте часовых поясов:
>>> import pytz
>>> import datetime
>>> td = pytz.timezone("Canada/Newfoundland").utcoffset(datetime.datetime.now())
>>> td
datetime.timedelta(-1, 77400)
>>> strfdelta(td, fmt="%s%H:%M")
'-02:30'
>>> td = pytz.timezone("Australia/Eucla").utcoffset(datetime.datetime.now())
>>> td
datetime.timedelta(0, 31500)
>>> strfdelta(td, fmt="%s%H:%M")
'+08:45'
Есть несколько способов сделать это в зависимости от платформы. Я бы выбрал один из следующих вариантов:
Qt Trolltech имеет объект с именем QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.
Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.
Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда Я бы выбрал один из следующих вариантов:
Qt Trolltech имеет объект с именем QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.
Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.
Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда Я бы выбрал один из следующих вариантов:
Qt Trolltech имеет объект с именем QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.
Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.
Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда s Qt имеет объект под названием QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.
Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.
Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда s Qt имеет объект под названием QFileSystemWatcher , который позволяет вам контролировать файлы и каталоги. Я уверен, что есть и другие кроссплатформенные фреймворки, которые дают вам такие возможности, но, по моему опыту, этот работает довольно хорошо.
Существует Win32 api под названием FindFirstChangeNotification , который выполняет свою работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.
Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда но, по моему опыту, этот работает довольно хорошо.
Существует Win32 api под названием FindFirstChangeNotification , который выполняет эту работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.
Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда но, по моему опыту, этот работает довольно хорошо.
Существует Win32 api под названием FindFirstChangeNotification , который выполняет эту работу. Есть хорошая статья, в которой небольшой класс-оболочка для api называется Как получить уведомление, если в указанном каталоге происходит изменение, которое поможет вам начать работу.
Если вы в порядке, используя C ++ / CLI с .NET Framework, тогда System.IO.FileSystemWatcher - ваш выбор класса. У Microsoft есть хорошая статья о как отслеживать изменения файловой системы с помощью этого класса.
FSEvents API является новым для OS X 10.5 и очень полнофункциональным.
Используйте inotify , как упомянул Алекс в своем ответе.
Если вам не нужно быть независимым от платформы, подход в Linux, который может снизить нагрузку на машину, чем «опрос» (периодическая проверка), - inotify
см., например, http://en.wikipedia.org/wiki/Inotify и множество ссылок на него. Для Windows см. http://msdn.microsoft.com/en-us/library/aa365261 (VS.85) .aspx .
Конечно, как и в VC ++. Вы получаете время последнего изменения, когда открываете файл, и вы периодически проверяете его, пока файл открыт. Если last_mod_time> saved_mod_time, это произошло.