Я работаю в компании, которая выпускает в частном магазине, и это работает очень похожим образом. Единственная разница в том, что Apple не проверяет приложение, и его загрузка занимает 1 минуту, а не 2 недели.
Как это работает:
Теперь пользователи могут щелкнуть ее и загрузить;)
Click here ;-)
Примечание. что вы не можете публиковать приложения публично, как это. Это предназначено, например, для распространения приложений в вашей собственной компании. В частности, у нас было 4 приложения. Магазин, приложение учета рабочего времени, книга контактов / адресов и другие конкретные приложения, которые не нуждаются в объяснении. Но было бы против EULA Apple публиковать любое из этих приложений (или ссылки для скачивания) публично. Попытка публикации в магазине приложений Apple также не пройдет проверку.
Это, как говорится, очень практично и полезно для многих компаний во многих случаях, потому что вы свободны не следовать никаким рекомендациям и избегать стрессового обзора.
Есть еще вопросы :)?
Используйте свойство 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())
ctime отличается на платформе: В некоторых системах (например, Unix) это время последнего изменения метаданных, а в других (например, Windows) - время создания . Это потому, что Unices обычно не сохраняют "исходное" время создания.
Тем не менее, вы можете получить доступ ко всей информации, предоставляемой ОС, с помощью модуля stat .
Модуль stat определяет константы и функции. для интерпретации результатов os.stat (), os.fstat () и os.lstat () (если они существуют). Для получения полной информации о вызовах stat, fstat и lstat обратитесь к документации по вашей системе.
stat.ST_CTIME
«Ctime», сообщаемый операционной системой. В некоторых системах (например, Unix) это время последнего изменения метаданных, а в других (например, Windows) - время создания (подробности см. В документации по платформе).