وحدة بسوتيل بيثون وقضية غريبة
سؤال
هذا يعمل تماما:
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
لا تنتمي إلى StackOverflow