Как вывести все процессы одним сообщением?
Имеется следующий код, как вывести в нем все процессы одним сообщением и убрать из каждого .exe?
import psutil
for proc in psutil.process_iter():
name = proc.name()
print(name)
if name == "program.exe":
pass
Чтобы получилось:
chrome
opera
browser
svhost
....
Ответы (2 шт):
Автор решения: eri
→ Ссылка
Способов можно придумать море
Вот этот почти правильный (почти потому что на некоторых системах приложения без расширений и может быть точка в имени)
name = proc.name().rsplit('.',maxsplit=1)[0]
Вот этот не очень, но
name = proc.name().rstrip('ex').strip('.')
Одним сообщением это как? предположу что
proclist = list(map( lambda proc: proc.name().rsplit('.',maxsplit=1)[0]
, psutil.process_iter()))
Автор решения: Alioshca Z
→ Ссылка
Через subprocess можно:
from subprocess import Popen, PIPE
prs = Popen('tasklist', stdout=PIPE).stdout.readlines()
pr_list = [prs[i].decode('cp866', 'ignore').split()[0] for i in range(3,len(prs))]
for p in pr_list:
print(p.split('.exe')[0])
Для получения одной строки из списка:
from subprocess import Popen, PIPE
prs = Popen('tasklist', stdout=PIPE).stdout.readlines()
pr_list = [prs[i].decode('cp866', 'ignore').split()[0].split('.exe')[0] for i in range(3,len(prs))]
pr_string = ', '.join(pr_list)
print(pr_string)