Получите время создания файла с Python на Mac

Я работаю в компании, которая выпускает в частном магазине, и это работает очень похожим образом. Единственная разница в том, что Apple не проверяет приложение, и его загрузка занимает 1 минуту, а не 2 недели.

Как это работает:

  1. Сгенерируйте ipa для распространения среди предприятий (с правильными профилями обеспечения)
  2. Загрузите ipa где угодно, если вам нужно что-то красивое, вы можете создайте приложение, которое перечисляет ваш IPA (ваш собственный частный магазин) с информацией о нем и ссылкой для его загрузки (см. ниже)
  3. Загрузите файл .plist и сделайте так, чтобы URL-адрес в поле URL был .ipa, который вы загрузили на шаге 1.
  4. Создайте базовую HTML-страницу с такой строкой, где вы хотите:
  5. Теперь пользователи могут щелкнуть ее и загрузить;)

    Click here ;-)
    

Примечание. что вы не можете публиковать приложения публично, как это. Это предназначено, например, для распространения приложений в вашей собственной компании. В частности, у нас было 4 приложения. Магазин, приложение учета рабочего времени, книга контактов / адресов и другие конкретные приложения, которые не нуждаются в объяснении. Но было бы против EULA Apple публиковать любое из этих приложений (или ссылки для скачивания) публично. Попытка публикации в магазине приложений Apple также не пройдет проверку.

Это, как говорится, очень практично и полезно для многих компаний во многих случаях, потому что вы свободны не следовать никаким рекомендациям и избегать стрессового обзора.

Есть еще вопросы :)?

8
задан cefstat 3 June 2009 в 20:16
поделиться

2 ответа

Используйте свойство st_birthtime в результате вызова os.stat () (или fstat / ] lstat ).

def get_creation_time(path):
    return os.stat(path).st_birthtime

Вы можете преобразовать целочисленный результат в объект datetime, используя datetime.datetime.fromtimestamp () .

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


Использование ctypes для доступа к системному вызову stat64 (работает с Python 2.5 +):

from ctypes import *

class struct_timespec(Structure):
    _fields_ = [('tv_sec', c_long), ('tv_nsec', c_long)]

class struct_stat64(Structure):
    _fields_ = [
        ('st_dev', c_int32),
        ('st_mode', c_uint16),
        ('st_nlink', c_uint16),
        ('st_ino', c_uint64),
        ('st_uid', c_uint32),
        ('st_gid', c_uint32), 
        ('st_rdev', c_int32),
        ('st_atimespec', struct_timespec),
        ('st_mtimespec', struct_timespec),
        ('st_ctimespec', struct_timespec),
        ('st_birthtimespec', struct_timespec),
        ('dont_care', c_uint64 * 8)
    ]

libc = CDLL('libc.dylib') # or /usr/lib/libc.dylib
stat64 = libc.stat64
stat64.argtypes = [c_char_p, POINTER(struct_stat64)]

def get_creation_time(path):
    buf = struct_stat64()
    rv = stat64(path, pointer(buf))
    if rv != 0:
        raise OSError("Couldn't stat file %r" % path)
    return buf.st_birthtimespec.tv_sec

Использование подпроцесса для вызова утилиты stat :

import subprocess

def get_creation_time(path):
    p = subprocess.Popen(['stat', '-f%B', path],
        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    if p.wait():
        raise OSError(p.stderr.read().rstrip())
    else:
        return int(p.stdout.read())
18
ответ дан 5 December 2019 в 08:00
поделиться

ctime отличается на платформе: В некоторых системах (например, Unix) это время последнего изменения метаданных, а в других (например, Windows) - время создания . Это потому, что Unices обычно не сохраняют "исходное" время создания.

Тем не менее, вы можете получить доступ ко всей информации, предоставляемой ОС, с помощью модуля stat .

Модуль stat определяет константы и функции. для интерпретации результатов os.stat (), os.fstat () и os.lstat () (если они существуют). Для получения полной информации о вызовах stat, fstat и lstat обратитесь к документации по вашей системе.

stat.ST_CTIME
«Ctime», сообщаемый операционной системой. В некоторых системах (например, Unix) это время последнего изменения метаданных, а в других (например, Windows) - время создания (подробности см. В документации по платформе).

2
ответ дан 5 December 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: