当前位置: 首页 > 知识库问答 >
问题:

获取使用python运行的windows应用程序列表

束建章
2023-03-14

我想只返回那些在Windows任务管理器中的“应用”类别下列出的应用程序,而不是所有正在运行的进程。下面的脚本返回所有我不想要的进程。如何根据我的要求修改此代码

import subprocess
cmd = 'WMIC PROCESS get Caption,Commandline,Processid'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in proc.stdout:
    print(line)

共有1个答案

高云瀚
2023-03-14

您可以使用PowerShell而不是WMIC来获取所需的应用程序列表:

import subprocess
cmd = 'powershell "gps | where {$_.MainWindowTitle } | select Description'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in proc.stdout:
    if line.rstrip():
        # only print lines that are not empty
        # decode() is necessary to get rid of the binary string (b')
        # rstrip() to remove `\r\n`
        print(line.decode().rstrip())

请注意,在某些系统上,这会导致一个空表,因为描述似乎是空的。在这种情况下,您可能需要尝试另一列,例如ProcessName,从而生成以下命令:

cmd = 'powershell "gps | where {$_.MainWindowTitle } | select ProcessName'

如果希望获得更多信息,例如进程id或路径,则整理输出需要付出更多的努力。

import subprocess
cmd = 'powershell "gps | where {$_.MainWindowTitle } | select Description,Id,Path'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in proc.stdout:
    if not line.decode()[0].isspace():
        print(line.decode().rstrip())

cmd的输出文本格式为表。不幸的是,它返回的不仅仅是我们需要的应用程序,所以我们需要整理一下。所有需要的应用程序都在描述列中有一个条目,因此我们只检查第一个字符是否为空白。

这就是原始表的外观(在isspace()if子句之前):

Description                                    Id Path
-----------                                    -- ----
                                              912
                                             9124
                                            11084
Microsoft Office Excel                       1944 C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE
 类似资料:
  • 问题内容: 获取运行Java应用程序时使用的所有类的列表的最简单方法是什么? 假设通过运行来调用: 运行该程序后,我想列出运行该程序时使用过的所有类: 在这种情况下,如果某个类已在程序执行期间由类加载器加载,并且如果存在此类静态块,则该类的静态块将被运行,则将该类定义为正在使用。 问题答案: 使用标志 verbose:class* 运行Java * 要将其附加到文件中: 等等 它还列出了定义这些文

  • 我在Docker中运行的Spring Boot应用程序有问题。 下面是我应用程序中嵌入的Dockerfile。 运行后,我会得到一个app-0.0.1-SNAPSHOT。jar,然后将其定义为Docker文件 接下来,我运行了这个命令我看到这个容器安装在我的docker桌面上。 在运行这个命令后,我在列表中也看到了这个容器。 我运行了这个命令来在docker中运行它。 运行此命令后,容器工作正常(

  • 当我发布windows窗体应用程序时,它在我开发它的机器上运行良好。但当我把它放在另一台笔记本电脑上就不工作了。双击.exe文件不会出错,也不会发生任何事情我的应用程序中有一个本地数据库。连接字符串为“data source=(LocalDB)\mssqllocaldb;attachdbfilename=datadirectory\database1.mdf;integrated security

  • 问题内容: 是否可以使用Java从Windows Vista计算机中获取已安装应用程序的列表(如来自卸载程序的列表)? 问题答案: 不是解决方案,而是解决方法! 如果没有外部API的支持,则无法使用Java SDK获取Windows本机信息。代替使用外部API(主要由LGPL许可且未完全开放),我们可以使用shell命令来获取相同的信息。 要获取已安装的软件列表,请使用ProcessBuilder

  • 我正在尝试将Microsoft Team BOT作为Azure Web应用程序运行-可以在此处找到完整的代码 application.py: 在本地运行时,我可以将端口设置为8000,例如,将ngrok指向localhost,并在我的bot通道注册中指定url,一切正常。我一直在努力让我的代码在Azure中工作,但我就是无法做到这一点。我已将脚本配置为在端口8000上运行,并在应用程序设置中设置参

  • 我意识到这个问题(Windows容器可以托管在Linux上吗?),但它并没有真正回答我的问题。 我是Docker的新手,但我的问题是这样的--如果我把任何windows应用程序放在Docker容器中,它现在能在Linux上运行吗?反之亦然? Confluent声称它只能在linux上运行,但我的同事使用Docker在Windows上安装了它。所以如果你能用Docker安装它,那么整个应用程序肯定会