Вы можете использовать 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'
Нужно больше столбцов / информации в выводе?
Если выхотите получить дополнительную информацию , например идентификатор процесса или путь приведение в порядок выходных данных требует немного больше усилий.
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
- это текст в формате таблицы.К сожалению, он возвращает больше, чем просто нужные нам приложения, поэтому нам нужно немного привести в порядок.Все нужные приложения имеют запись в столбце Description , поэтому мы просто проверяем, является ли первый символ пробелом или нет.
Это то, как будет выглядеть исходная таблица (доisspace()
если предложение):
Description Id Path
----------- -- ----
912
9124
11084
Microsoft Office Excel 1944 C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE