Задача публикации артефактов в конвейере сборки в devops Azure (Hosted vs2017)

Получение какой-либо даты модификации кросс-платформенным способом легко - просто вызовите os.path.getmtime(path) , и вы получите отметку времени Unix, когда последний файл в path был последним изменен.

Получение дат создания файла , с другой стороны, неудобно и зависит от платформы, различающееся даже между тремя большими ОС:

  • Вкл. Windows, файл ctime файла (задокументированный в https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx ) сохраняет дату создания. Вы можете получить доступ к этому в Python через os.path.getctime() или атрибут .st_ctime результата вызова os.stat() . Этот не будет работать в Unix, где ctime - последний раз, когда атрибуты или содержимое файла были изменены .
  • На Mac, а также некоторые другие ОС на базе Unix, вы можете использовать атрибут .st_birthtime результата вызова os.stat().
  • В Linux это невозможно в настоящее время , по крайней мере, без написания расширения C для Python. Хотя некоторые файловые системы, обычно используемые с Linux , создают даты создания хранилища (например, ext4 хранит их в st_crtime), ядро ​​Linux не имеет доступа к ним ; в частности, структуры, которые он возвращает из вызовов stat() в C, начиная с последней версии ядра, не содержат полей даты создания . Вы также можете видеть, что идентификатор st_crtime в настоящее время не присутствует нигде в источнике Python . По крайней мере, если вы находитесь на ext4, данные - , прикрепленные к inodes в файловой системе, но нет удобного способа доступа к нему. Следующей лучшей идеей в Linux является доступ к файлу mtime с помощью либо os.path.getmtime() , либо атрибута .st_mtime результата os.stat(). Это даст вам последний раз, когда содержимое файла было изменено, что может быть подходящим для некоторых случаев использования.

Положив все это вместе, межплатформенный код должен выглядеть примерно так ...

import os
import platform

def creation_date(path_to_file):
    """
    Try to get the date that a file was created, falling back to when it was
    last modified if that isn't possible.
    See http://stackoverflow.com/a/39501288/1709587 for explanation.
    """
    if platform.system() == 'Windows':
        return os.path.getctime(path_to_file)
    else:
        stat = os.stat(path_to_file)
        try:
            return stat.st_birthtime
        except AttributeError:
            # We're probably on Linux. No easy way to get creation dates here,
            # so we'll settle for when its content was last modified.
            return stat.st_mtime

0
задан Md Farid Uddin Kiron 9 February 2019 в 10:38
поделиться