【问题标题】:Python's psutil module and a bizarre issuePython 的 psutil 模块和一个奇怪的问题
【发布时间】:2014-04-13 02:08:03
【问题描述】:

这很好用:

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

它会引发错误:AccessDenied: (pid=560) 我在 Windows 环境中,需要访问所有进程的名称。我已经有一个工作代码(前者),所以我的问题更多是出于好奇。

try/except 语句在第一个示例中的作用是什么,如果我在第二个示例中删除它们为什么不起作用?

【问题讨论】:

  • 有什么区别? (除了缩进。)
  • 您似乎没有删除第二种情况下的 try except 语句。
  • @ebarr 愚蠢的我没有正确编辑。现在应该有所不同了。

标签: python windows process psutil


【解决方案1】:

除非您是 root 用户/管理员,否则并非每个进程的所有信息都可供您使用。看到这个问题:python psutil on windows gives access denied

你最好改变你的第一个例子来专门捕捉这些情况,用:

try:    
    if str(psutil.Process(pid).name()) == name:      
        return True    
except AccessDenied:    
    print "Unable to access PID:",pid

【讨论】:

  • 所以发生的情况是,在第一个示例中,某些进程将不可用并且会抛出错误,但是因为我用 except 语句捕获了它,所以循环继续,而没有 try/except 组合循环在遇到第一个错误时退出?
  • @DanielShaw 是的,就是这样。我添加except AccessDenied 而不仅仅是except 的原因是我只希望循环忽略AccessDenied 类型错误。所有其他错误应正常引发,导致代码退出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多