Первое, что пришло на ум можно устранить лямбду:
reduce(list.__add__, map(list, [mi.image_set.all() for mi in list_of_menuitems]))
Или даже устраняют карту, так как Вы уже получили аккомпанемент списка:
reduce(list.__add__, [list(mi.image_set.all()) for mi in list_of_menuitems])
можно также просто выразить это как сумму списков:
sum([list(mi.image_set.all()) for mi in list_of_menuitems], [])
Почти наверняка вам понадобится dscl. Кратчайший способ сделать это уже указывался:
$ dscl . list /users
$ dscl . list /groups
Если вы хотите вывести информацию о каждом пользователе, используйте readall
:
$ dscl . readall /users
$ dscl . readall /groups
И если вам нужно программно проанализировать указанную информацию, используйте - plist, чтобы упростить вашу жизнь:
$ dscl -plist . readall /users
$ dscl -plist . readall /groups
Подход Open Directory (от: http://rickcogley.blogspot.com/2008/11/listing-open-directory-users-on-os-x.html ]):
dscacheutil -q user
dscacheutil -q group
Возьмите каждую строку из соответствующего вывода, которая начинается с «name:», уберите «name:», и у вас есть свой список. Если у вас нет dscacheutil, вы можете использовать ручные команды:
root# dscl localhost list /Local/Default/Users
root# dscl localhost list /LDAPv3/127.0.0.1/Users
Старый школьный подход до Open Directory .... (вздох): Для списка пользователей:
Список групп:
Команды без искажения / без временного файла:
# dscl . list /users
# dscl . list /groups
посмотрите, например, dsexport .
Вот несколько примеров:
dsexport /tmp/export.out /Local/Default dsRecTypeStandard:Groups
dsexport /tmp/export.out /Local/Default dsRecTypeStandard:Users
выходные данные немного мусор, но что-то вроде sed может их очистить для вас.
Вернемся к старому В наши дни мы бы сделали это тривиально с помощью NetInfo Kit, но сегодня нет удобного способа сделать это с помощью Objective-C. Вам придется покопаться в API OpenDirectory.