如何知道taskmgr中正在运行哪个python脚本?

如何知道taskmgr中正在运行哪个python脚本?,python,windows,taskmanager,Python,Windows,Taskmanager,似乎在任务管理器中,我得到的只是python/pythonwin的进程。那么,我怎样才能知道哪个python脚本正在运行呢?对于这些问题,通常的答案是。您可以在工具提示中看到任何python.exe或pythonw.exe实例的完整命令行 要在Python中获得相同的信息,可以使用 结果,pythons,是一个表示Python进程的列表。每个列表的第一项是启动流程的命令行,包括所有选项。第二项是进程ID psutilProcess类中有许多其他内容,因此如果您需要这些内容,可以这样做: pyth

似乎在任务管理器中,我得到的只是python/pythonwin的进程。那么,我怎样才能知道哪个python脚本正在运行呢?

对于这些问题,通常的答案是。您可以在工具提示中看到任何
python.exe
pythonw.exe
实例的完整命令行

要在Python中获得相同的信息,可以使用

结果,
pythons
,是一个表示Python进程的列表。每个列表的第一项是启动流程的命令行,包括所有选项。第二项是进程ID

psutil
Process
类中有许多其他内容,因此如果您需要这些内容,可以这样做:

pythons = [p for p in psutil.process_iter() if p.name.lower() in ("python.exe", "pythonw.exe")]
现在,在我的系统上,使用
psutil.process\u iter()
迭代所有进程需要几秒钟,这在我看来很可笑。下面的代码速度要快得多,因为它在Python看到之前就进行了流程过滤,但它依赖于
wmic
命令行工具,并非所有版本的Windows都有此工具(XP Home尤其缺少此工具)。这里的结果与第一个
psutil
版本相同(列表列表,每个列表包含一个Python进程的命令行和进程ID)

如果
wmic
不可用,您将得到一个空列表
[]
。因为您知道至少有一个Python进程(您的!),所以可以将其作为错误捕获并显示适当的消息

要获取自己的进程ID,以便在开始终止进程时可以将其从考虑范围中排除,请使用Python 3尝试pywin32的
win32process.GetCurrentProcessID()

import psutil

pythons = [[" ".join(p.cmdline()), p.pid] for p in psutil.process_iter()
        if p.name().lower() in ["python.exe", "pythonw.exe"]]

我对kindall的回答有些疑问。对于python 3.8:

import psutil
for p in psutil.process_iter():
    try: 
        if p.name().lower() in ["python.exe", "pythonw.exe"]:
            print(p.pid, p.cmdline)
    except: 
        continue

在第二个Python进程中有更好的方法吗?我查看了pywin32,没有发现任何有帮助的方法。我能想到的最好办法是向wmic提供
wmic
。我已经为此添加了一些代码。@TankorSmash:除了使用
wmic
命令行工具之外,还使用了
psutil
提出了一个替代方案。我在您答案的顶部看到了,对吗?谢谢你的额外努力!
psutil
方法给了我“AttributeError:'function'对象没有属性'lower'”,但是wmic选项对我很有效。实际上Windows Vista和7已经提供了一个任务管理器,可以显示完整的命令行。哇,我不知道!找到答案后,它很容易打开。@kindall给出了同样的答案
import psutil

pythons = [[" ".join(p.cmdline()), p.pid] for p in psutil.process_iter()
        if p.name().lower() in ["python.exe", "pythonw.exe"]]
import psutil
for p in psutil.process_iter():
    try: 
        if p.name().lower() in ["python.exe", "pythonw.exe"]:
            print(p.pid, p.cmdline)
    except: 
        continue