我有一个函数应该使用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
答案 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