طريقة للتحقق من حقوق المشرف في السيناريو بيثون تحت ويندوز عبر منصة؟

StackOverflow https://stackoverflow.com/questions/1026431

  •  06-07-2019
  •  | 
  •  

سؤال

هل هناك أي وسيلة عبر منصة للتأكد من أن بلدي النصي بايثون يتم تنفيذه مع حقوق المشرف؟ للأسف، os.getuid() هو UNIX فقط وغير متوفر في ويندوز.

هل كانت مفيدة؟

المحلول

import ctypes, os
try:
 is_admin = os.getuid() == 0
except AttributeError:
 is_admin = ctypes.windll.shell32.IsUserAnAdmin() != 0

print is_admin

نصائح أخرى

وحاول القيام بكل ما تحتاج حقوق المشرف ل، وتحقق للفشل.

وهذا سوف يعمل فقط لبعض الأمور رغم ذلك، ماذا تحاول أن تفعل؟

ومن الأفضل إذا كنت تحقق من منصة السيناريو الخاص بك يعمل بنظام التشغيل (باستخدام sys.platform) والقيام اختبار استنادا إلى ذلك، على سبيل المثال، استيراد بعض hasAdminRights وظيفة من آخر، وحدة منصة محددة.

في ويندوز هل يمكن أن تحقق ما إذا كان Windows\System32 غير قابل للكتابة باستخدام os.access، ولكن تذكر في محاولة لاستعادة مسار المجلد "ويندوز" الفعلي النظام، وربما باستخدام pywin32. لا ترميز ثابت واحد.

وعضوية مجموعة مسؤولي (المجال / المحلي / المؤسسة) هو شيء واحد ..

والخياطة طلبك لعدم استخدام امتياز بطانية ووضع حقوق غرامة الحبيبات هو الخيار الأفضل وخاصة في حالة استخدام التطبيق iinteractively.

واختبار معينة امتيازات المسماة (se_shutdown se_restore الخ)، وحقوق ملف هي abetter الرهان وأسهل للتشخيص.

وهنا وظيفة أداة أنا خلقت من الإجابة المقبولة:

import os
import ctypes

class AdminStateUnknownError(Exception):
    """Cannot determine whether the user is an admin."""
    pass


def is_user_admin():
    # type: () -> bool
    """Return True if user has admin privileges.

    Raises:
        AdminStateUnknownError if user privileges cannot be determined.
    """
    try:
        return os.getuid() == 0
    except AttributeError:
        pass
    try:
        return ctypes.windll.shell32.IsUserAnAdmin() == 1
    except AttributeError:
        raise AdminStateUnknownError
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top