0

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

4 に答える 4

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
于 2015-10-27T13:56:30.040 に答える
0

私はあなたのコードをテストしようとしています。これを除いて、動作します:

if proc.name() == process_name:

次のものに置き換える必要があります。

if proc.name == process_name:

いくつかの単純化がありますが、コードの精神があります:

   import psutil

   def pid_find(process_name):
      for proc in psutil.process_iter():
        try:
           if proc.name == process_name:
              return proc.pid
        except psutil.AccessDenied:
           pass
      raise Exception("Process %s not found" % process_name)

   print pid_find("bash")
于 2015-10-27T14:07:26.477 に答える