如何定時自啟動與自關(guān)閉一些python腳本
定時自啟動與自關(guān)閉一些python腳本
是windows系統(tǒng),要是linux就好了。
思路是這樣的
首先到早上6點整啟動腳本或某個軟件,然后記錄下對應(yīng)的pid,等到了晚上18點整的時候,自動根據(jù)pid再殺死對應(yīng)進程。
定時開啟與關(guān)閉用apscheduler,示例代碼如下:
from apscheduler.schedulers.blocking import BlockingScheduler
def start_scripts():
pass
def kill_processes():
pass
if __name__ == "__main__":
scheduler = BlockingScheduler()
# 添加定時任務(wù)(crontab格式)
scheduler.add_job(start_scripts, 'cron', hour=6, minute=0 # 啟動
scheduler.add_job(kill_processes, 'cron', hour=18, minute=0 # 終止
print("監(jiān)控程序已啟動")
try:
scheduler.start()
except (KeyboardInterrupt, SystemExit):
pass
為了保證啟動程序的時候獲取到對應(yīng)的真實pid,使用subprocess依賴庫
import subprocess
try:
subprocess.Popen(
["python", script],
cwd="d:/file/script/start.py",
creationflags=subprocess.CREATE_NEW_CONSOLE)
except Exception as e:
print(f"啟動失敗:{str(e)}")
try:
proc = subprocess.Popen(
["d:/file/soft/server.exe"],
cwd="d:/file/soft/")
pid = str(proc.pid)
with open("pid.txt", 'a') as f:
f.write(f"server.exe-pid={pid}\n")
except Exception as e:
print(f"啟動失?。簕str(e)}")
啟動腳本窗口的沒有在這里獲取pid,是因為一旦開啟新窗口后,通過proc.pid獲取的無效,AI說是:
- 在Windows 7及更早版本中,創(chuàng)建新控制臺時會生成
conhost.exe宿主進程 - 返回的PID指向的是控制臺宿主進程,而非實際目標進程
- 新架構(gòu)差異:Windows 8+ 采用了
conhost與終端分離的新架構(gòu),而Win7使用傳統(tǒng)模式
總之為了避免這個情況
我在被啟動的python腳本里面讀取pid,使用的psutil庫,如下:
import psutil
current_process = psutil.Process()
pid = str(current_process.pid)
print(f"當(dāng)前進程ID: {pid}")
with open("pid.txt", 'a') as f:
f.write(f"script-1-pid={pid}\n") 這樣就可以避免返回的pid異常問題了. 后期等到晚上18點的時候讀取pid文件,按順序kill即可。
當(dāng)然如果希望每隔一段時間執(zhí)行一次,可以這樣:
def print_fun():
print("執(zhí)行時間:", time.asctime())
scheduler.add_job(print_fun, 'interval', seconds=10)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 讀取.csv文件數(shù)據(jù)到數(shù)組(矩陣)的實例講解
今天小編就為大家分享一篇python 讀取.csv文件數(shù)據(jù)到數(shù)組(矩陣)的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
python2利用wxpython生成投影界面工具的圖文詳解
這篇文章主要介紹了python2利用wxpython生成投影界面工具的圖文詳解,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
用Python中的__slots__緩存資源以節(jié)省內(nèi)存開銷的方法
這篇文章主要介紹了用Python中的__slots__通過緩存資源的方式以節(jié)省內(nèi)存開銷的方法,且示例代碼非常簡單,需要的朋友可以參考下2015-04-04
python基于tkinter點擊按鈕實現(xiàn)圖片的切換
這篇文章主要介紹了python基于tkinter點擊按鈕實現(xiàn)圖片的切換,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

