windows 如何使用Python 2获取进程位置七个?

cclgggtu  于 2023-05-01  发布在  Windows
关注(0)|答案(4)|浏览(149)

我正在寻找一种使用Python检索Windows进程的位置路径(对应的exe文件的路径)的方法。我设法得到了很多信息,如PID,名称等。但找不到地点
任何可以帮助我的建议都非常感谢。

ubof19bj

ubof19bj1#

你看过psutil吗?

pip install psutil

甚至更好。..

conda install psutil

它有一个exe方法,可以做到这一点
exe()[source]作为绝对路径的进程可执行文件。在某些系统上,这也可能是空字符串。返回值在第一次调用后缓存。

>>> import psutil
>>> psutil.pids()
[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224,
 268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355,
 2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245,
 4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358,
 4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235,
 5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]
>>>
>>> p = psutil.Process(7055)
>>> p.name()
'python'
>>> p.exe()
'/usr/bin/python'
kzmpq1sx

kzmpq1sx2#

通过名称或pid获取文件位置
这将完成这项工作(python 3.6):

from win32com.client import GetObject

def Process_path(processname):
    WMI = GetObject('winmgmts:')
    processes = WMI.InstancesOf('Win32_Process')                #get list of all process
            for p in processes :                                #for each process :
                if p.Properties_("Name").Value == Processname : #if the process name is the one we wanted
                    return p.Properties_[7].Value               #return the path and break the funcion
            return "no such process"                            #no such process (if the funcion didnt break till now return false)

print(Process_path("process.exe"))

如果你想通过pid获取位置,试试这个:

from win32com.client import GetObject

def Process_path(pid):
    WMI = GetObject('winmgmts:')
    processes = WMI.InstancesOf('Win32_Process')                
            for p in processes :                                
                if p.Properties_("ProcessID").Value == pid: 
                    return p.Properties_[7].Value               
            return "no such process"                            

print(Process_path("1111"))
jpfvwuh4

jpfvwuh43#

我想要一个解决方案,给我的路径,其中进程正在运行当前不是源路径像'/usr/bin/python',所以你可以尝试:

import psutil
p = psutil.Process(your pid)
path = p.cwd()
print(path) #/var/www/html/app_name
50few1ms

50few1ms4#

我通过使用子进程模块和WMIC来解决这个问题。对于有兴趣的人,以下是我的最终解决方案:

import subprocess
cmd = 'wmic process where "name=\'notepad.exe\'" get ExecutablePath'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
print proc.stdout.read()

相关问题