iT邦幫忙

0

使用python 偵測Windows PID

  • 分享至 

  • xImage

以下程式碼=程式去偵測main內的檔案,列出一個表,然後會有PID顯示出來

import os
import psutil

#判斷PID 自動重啟
def times():
    case_path = os.path.join("main")
    lst = os.listdir(case_path)
    for c in lst:
        if os.path.splitext(c)[1] == '.song':
            ne = ("程式:"+c)
            pids = psutil.process_iter()
            for pid in pids:
                if c == pid.name():
                    gu = "PID:"+str(pid.pid)
    return ne,gu

print(times())

沒有顯示PID的那個程,就表示死亡了,須重啟,但是目前沒辦法判斷else會顯示我全部的PID
,如果我在gu 下面家print會出現資料夾內全部的PID
可是回傳直卻之友回傳最後一項
這是為什麼?
如果我要回傳值又想迴圈不中止 能用什麼語法 目前找到能回傳直的只有return 可是迴圈會終止QQ
求大大指導

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
alien663
iT邦研究生 3 級 ‧ 2022-12-13 16:06:13

不清楚你的真正需求是甚麼,不過聽你這樣描述,感覺你現在的流程是怪怪的。

單純就你的論述來看,你的回傳值改成用list,才能把所有資料都帶進去,不然for loop執行第二圈的時候不就把第一圈的資料給覆蓋了嗎?

[
    {"ne" : "xxx", "gu": "xxx"},
    {"ne" : "xxx", "gu": "xxx"},
]

大概長相會是變成這樣

data = []
for c in lst:
    temp = {}
        if os.path.splitext(c)[1] == '.song':
            # ne = ("程式:"+c)
            temp["ne"] = ("程式:"+c)
            temp["gu"] = []
            pids = psutil.process_iter()
            for pid in pids:
                if c == pid.name():
                    # gu = "PID:"+str(pid.pid)
                    temp["gu"].append("PID:"+str(pid.pid))
    data.append(temp)

我的要求是資料夾內有5隻exe程式
這5隻會自動啟動,但也會因為時間而停止或著是異常停止
那程式一直在偵測PID,當偵測不到5隻程式的PID時會自動重啟這隻程式。
我想要這樣,但目前隻有回傳最後一隻程式的資訊。
你的方法我試試看

froce iT邦大師 1 級 ‧ 2022-12-13 16:23:31 檢舉
alien663 iT邦研究生 3 級 ‧ 2022-12-13 17:09:07 檢舉

就流程而言,其實可以更簡單,假設下面程式是判斷是否存活的狀況,你可以用排程定期呼叫這段程式碼,這樣就可以達到你的需求了。

myPrograms = ["Test1", "Test2", "Test3", "Test10"]
systemProcess = [{"PID": 1, "Name": "Test1"},{"PID": 2, "Name": "Test2"}, {"PID": 3, "Name": "Test3"}, {"PID": 4, "Name": "Test4"}, {"PID": 5, "Name": "Test5"}]

for program in myPrograms:
    if program in map(lambda item : item["Name"], systemProcess):
        print("Program is alive")
    else:
        print("Program is dead")
0
saturn
iT邦見習生 ‧ 2022-12-14 11:38:54

我的建议如果是管理执行程序,而且还有个关键词PID,那么直接使用bat啊。毕竟这两个相关性很大。

我要發表回答

立即登入回答