簡體   English   中英

在Python中確定正在運行的程序

[英]Determining running programs in Python

我如何使用Python來確定當前正在運行的程序。 我在Windows上。

感謝@ hb2pencil for WMIC命令! 以下是如何在沒有文件的情況下管道輸出:

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
import os
os.system('WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid')
f = open("C:\ProcessList.txt")
plist = f.readlines()
f.close()

現在plist包含一個格式化的以空格分隔的進程列表:

  • 第一列是正在運行的可執行文件的名稱
  • 第二列是表示正在運行的進程的命令
  • 第三列是進程ID

這應該很容易用python解析。 請注意,第一行數據是列的標簽,而不是實際的過程。

請注意,此方法僅適用於Windows!

與用於獲取進程的實際python工具相比,子進程命令中的管道信息並不理想。 試試psutil模塊。 要獲取進程號列表,請執行以下操作:

psutil.get_pid_list()

我擔心你必須在線下載這個模塊,它不包含在python發行版中,但這是解決問題的更好方法。 要訪問您擁有編號的流程名稱,請執行以下操作:

psutil.Process(<number>).name

這應該是你正在尋找的。 此外,這是一種查找特定進程是否正在運行的方法:

def process_exists(name):
    i = psutil.get_pid_list()
    for a in i:
        try:
            if str(psutil.Process(a).name) == name:
                return True
        except:
            pass
    return False

這使用可執行文件的名稱,例如,要查找powershell窗口,您可以這樣做:

process_exists("powershell.exe")

我被get_pid_list()拒絕訪問。 一個更新的方法適用於Windows和OSX:

import psutil

for proc in psutil.process_iter():
    try:
        if proc.name() == u"chrome.exe":
            print(proc)
            print proc.cmdline()
    except psutil.AccessDenied:
        print "Permission error or access denied on process"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM