Python - 使用psutil查找PID函数 - 不返回任何内容

时间:2015-10-27 13:30:24

标签: python psutil

我有一个函数应该使用psutil返回给定进程的进程ID,但由于某种原因它不会返回任何内容。

打印所需变量显示正确的值。我想我做错了。

def pid_find(process_name):
   pid = []
   for proc in psutil.process_iter():
     try:
        if proc.name() == process_name:
            pid.append(proc.pid)
     except psutil.AccessDenied:
        pass
   try:
     process = pid[0]
   except IndexError:
     raise Exception("Process %s not found" % process_name)
   print process # prints the correct value
   return process # does not return anything

4 个答案:

答案 0 :(得分:0)

如果有适当的缩进,它应该是这样的 -

def pid_find(process_name):
    pid = []
    for proc in psutil.process_iter():
        try:
            if proc.name() == process_name:
                pid.append(proc.pid)
        except psutil.AccessDenied:
            pass
    try:
        process = pid[0]
    except IndexError:
        raise Exception("Process %s not found" % process_name)
    print process #prints the correct value
    return process # return value

答案 1 :(得分:0)

可以使用wmi查询完成,无需迭代:

from win32com.client import Dispatch
import wmi
server = Dispatch("WbemScripting.SWbemLocator")
c = server.ConnectServer("localhost", "root\\cimv2")
process_query = "Select * from Win32_Process Where Namse like '%{0}%'".format(cmd_argument)
process = c.ExecQuery(process_query)
for i in process[0].Properties_:
    if i.Name == 'ProcessId':
        return i.Value

答案 2 :(得分:0)

我只是尝试测试你的代码。它的作品除外:

@Override
  public boolean supportsExplicitLock() {
    return false;
  }

必须替换为:

if proc.name() == process_name:

通过一些简化,但具有您的代码精神:

if proc.name == process_name:

答案 3 :(得分:0)

我想我发现了这个问题。该函数工作正常,但我没有正确调试以检查该函数是否有效:

这是我尝试的方式:

功能位于文件 functions.py 文件
中 我正在调用 test.py 文件中的函数,如下所示:

import functions
def debug
   functions.pid_find("chrome.exe) 

if __name__ == "__main__":
    debug()

但是如果我将函数放入变量中,我应该能够存储结果并进一步使用它:

import functions
def debug(proc):
    pid = functions.pid_find(proc)
    print pid #shows that pid has the correct value