سؤال

هذا يعمل تماما:

def find_processes():
    name = "ProcessName.exe"
    pid_list = psutil.get_pid_list()
    for pid in pid_list:
        try:
            if str(psutil.Process(pid).name()) == name:
                return True
        except:
            pass
    return False

هذا لا:

def find_processes():
    name = "ProcessName.exe"
    pid_list = psutil.get_pid_list()
    for pid in pid_list:
        if str(psutil.Process(pid).name()) == name:
            return True
    return False

يثير خطأ:الوصول:(بيد = 560) أنا على بيئة ويندوز وتحتاج إلى الوصول إلى جميع أسماء العمليات.لدي بالفعل رمز العمل (السابق) ، لذلك سؤالي هو أكثر من الفضول.

ماذا تفعل try/except البيانات تفعل في المثال الأول, ولماذا لا يعمل إذا قمت بإزالتها في الثانية?

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

المحلول

لن تكون جميع المعلومات من كل عملية متاحة لك إلا إذا كنت المستخدم/المسؤول الجذر.انظر هذا السؤال: بايثون بسوتيل على ويندوز يعطي رفض الوصول.

سيكون من الأفضل لك تغيير المثال الأول الخاص بك لالتقاط هذه الحالات على وجه التحديد ، مع:

try:    
    if str(psutil.Process(pid).name()) == name:      
        return True    
except AccessDenied:    
    print "Unable to access PID:",pid
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top