[英]How to detect if a process is running using Python on Win and MAC
我試圖找到一種方法來檢測進程是否在 Windows 操作系統的 Windows 任務管理器和 MAC 操作系統的 Macintosh 活動監視器中運行,使用 Python
有人可以幫我解決代碼嗎?
psutil是一個跨平台庫,用於檢索有關正在運行的進程和系統利用率的信息。
import psutil
pythons_psutil = []
for p in psutil.process_iter():
try:
if p.name() == 'python.exe':
pythons_psutil.append(p)
except psutil.Error:
pass
>>> pythons_psutil
[<psutil.Process(pid=16988, name='python.exe') at 25793424>]
>>> print(*sorted(pythons_psutil[0].as_dict()), sep='\n')
cmdline
connections
cpu_affinity
cpu_percent
cpu_times
create_time
cwd
exe
io_counters
ionice
memory_info
memory_info_ex
memory_maps
memory_percent
name
nice
num_ctx_switches
num_handles
num_threads
open_files
pid
ppid
status
threads
username
>>> pythons_psutil[0].memory_info()
pmem(rss=12304384, vms=8912896)
在股票 Windows Python 中,您可以使用subprocess
和csv
來解析tasklist.exe
的輸出:
import subprocess
import csv
p_tasklist = subprocess.Popen('tasklist.exe /fo csv',
stdout=subprocess.PIPE,
universal_newlines=True)
pythons_tasklist = []
for p in csv.DictReader(p_tasklist.stdout):
if p['Image Name'] == 'python.exe':
pythons_tasklist.append(p)
>>> print(*sorted(pythons_tasklist[0]), sep='\n')
Image Name
Mem Usage
PID
Session Name
Session#
>>> pythons_tasklist[0]['Mem Usage']
'11,876 K'
這是 eryksun 的 Windows 特定解決方案(僅使用內置 python 模塊)的衍生產品,刪除 csv 導入並直接過濾任務列表輸出以獲取 exe 名稱:
import subprocess
def isWindowsProcessRunning( exeName ):
process = subprocess.Popen(
'tasklist.exe /FO CSV /FI "IMAGENAME eq %s"' % exeName,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True )
out, err = process.communicate()
try : return out.split("\n")[1].startswith('"%s"' % exeName)
except: return False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.