2008-11-16 14 views

Trả lời

20

Bạn có thể muốn có một cái nhìn tại các module pwd trong stdlib trăn, ví dụ:

import pwd 
pw = pwd.getpwnam("nobody") 
uid = pw.pw_uid 

nó sử dụng/etc/passwd (tốt, về mặt kỹ thuật nó sử dụng posix C API, vì vậy tôi cho rằng nó có thể hoạt động trên một hệ điều hành nếu nó không sử dụng/etc/passwd nhưng tiếp xúc với các chức năng cần thiết) nhưng sạch hơn phân tích cú pháp theo cách thủ công

+0

Lưu ý rằng việc sử dụng pwd.getpwnam hoạt động chính xác ngay cả khi/etc/passwd trỏ tới các cơ chế bên ngoài (nghĩ một dòng có một dấu "+" trong/etc/passwd) như LDAP. – tzot

5

Không bao giờ quét trực tiếp /etc/passwd.

Ví dụ: trên hệ thống Linux tôi quản lý, tài khoản người dùng không nằm trên /etc/passwd, nhưng trên máy chủ LDAP.

Cách đúng là sử dụng getpwent chức năng/getgrent và có liên quan C (như trong câu trả lời @ TFKyle của), mà sẽ nhận được thông tin về cách chính xác cho mỗi hệ thống (trên Linux glibc, nó đọc /etc/nsswitch.conf để biết được NSS động thư viện để tải để có được thông tin).