Windows 如何使用Python 2.7获取进程位置?

Windows 如何使用Python 2.7获取进程位置?,windows,python-2.7,process,Windows,Python 2.7,Process,我正在寻找一种使用Python检索Windows进程的位置路径(对应exe文件的路径)的方法。我设法获得了很多信息,如PID、姓名等,但没有机会知道位置 非常感谢您给我的任何建议。您退房了吗 或者更好 conda install psutil 它有一个exe方法,可以做到这一点 exe()[源代码] 作为绝对路径的进程可执行文件。在某些系统上,这也可能是空字符串。返回值在第一次调用后缓存 >>> import psutil >>> psutil.pids()

我正在寻找一种使用Python检索Windows进程的位置路径(对应exe文件的路径)的方法。我设法获得了很多信息,如PID、姓名等,但没有机会知道位置

非常感谢您给我的任何建议。

您退房了吗

或者更好

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'

我通过将子流程模块与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()
按名称或pid获取文件位置

这将完成任务(python 3.6):

如果您想通过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"))

不幸的是,我不允许安装其他python模块。如果进程是从网络共享启动的,如//some share/folder/proc.exe,这对我不起作用。p.exe()返回的路径是/some share/folder/proc.exe,因此它缺少一个/。我刚刚提交了一份错误报告来修复Windows上的网络路径:这非常有用<代码>p.Properties\u7.值是键吗
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"))
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"))