以下程式碼=程式去偵測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
求大大指導
不清楚你的真正需求是甚麼,不過聽你這樣描述,感覺你現在的流程是怪怪的。
單純就你的論述來看,你的回傳值改成用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時會自動重啟這隻程式。
我想要這樣,但目前隻有回傳最後一隻程式的資訊。
你的方法我試試看
就流程而言,其實可以更簡單,假設下面程式是判斷是否存活的狀況,你可以用排程定期呼叫這段程式碼,這樣就可以達到你的需求了。
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")