關於讀取process list遇到的問題

小弟我有天在蝦扣的時候遇到了這個問題

先給大家看這串代碼

def checkIfProcessRunning(processName):
    for proc in psutil.process_iter():
        try:
            if processName.lower() in proc.name().lower():
                return True
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    return False;

簡單來說就是如果 processName (process list)有在 proc.name 裡面就會得到回答true

然後這是我呼叫的方式

while checkIfProcessRunning('VALORANT') == False:
    os.system("cls")
    print("正在等待VALORANT運行")
else:
    os.system("cls")
    os.system("title 已檢測到VALORANT執行")

我這樣寫在測試的時候一直都沒有問題

直到我把它編譯成exe的時候….

無論如何 “checkIfProcessRunning” 這個回應的都是True

一開始我以為是pyinstaller 在搞我

到最後我直接把 proc.name print 在 console 裡才發現問題

我把這個exe的檔名取成 “valorant change voice over”

這樣process list裡面的就會寫”valorant change voice over.exe”

(.py執行的話 process list會寫 python.exe)

難怪會直接回答True

所以把呼叫代碼改成這樣就好了

while checkIfProcessRunning('VALORANT.exe') == False:
    os.system("cls")
    print("正在等待VALORANT運行")
else:
    os.system("cls")
    os.system("title 已檢測到VALORANT執行")