我正在寻找一种使用Python检索Windows进程的位置路径(相应exe文件的路径)的方法。我设法得到了很多信息,如PID,名字等,但没有机会获得该位置。
非常感谢任何可以帮助我的建议。
答案 0 :(得分:2)
你签出了psutil吗?
pip install psutil
甚至更好......
conda install psutil
它有一个可以解决问题的exe方法
EXE()[来源] 该进程可作为绝对路径执行。在某些系统上,这也可能是一个空字符串。第一次调用后会返回返回值。
>>> 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'
答案 1 :(得分:0)
按名称或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获取locaiton,试试这个:
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"))
答案 2 :(得分:-2)
我设法通过将子进程模块与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()