簡體   English   中英

自我重啟Python腳本

[英]Self Restarting a Python Script

我為我的腳本(Python 3)創建了一個看門狗計時器,如果發生任何錯誤,它可以使我停止執行(以下代碼未顯示)。 但是,我希望能夠僅使用Python(不使用外部腳本)自動重新啟動腳本。 該代碼需要跨平台兼容。

我已經嘗試過子進程和execv( os.execv(sys.executable, ['python'] + sys.argv) ),但是在Windows上卻看到了非常奇怪的功能。 我打開命令行,然后運行腳本(“ python myscript.py”)。 該腳本會停止,但不會退出(通過任務管理器驗證),除非再次按Enter鍵,否則它將不會自行重啟。 我希望它能自動工作。

有什么建議么? 謝謝你的幫助!

import threading
import time
import subprocess
import os
import sys

if __name__ == '__main__':
    print("Starting thread list: " + str(threading.enumerate()))

    for _ in range(3):
        time.sleep(1)
        print("Sleeping")

    ''' Attempt 1 with subprocess.Popen '''
    # child = subprocess.Popen(['python',__file__], shell=True)

    ''' Attempt 2 with os.execv '''
    args = sys.argv[:]
    args.insert(0, sys.executable)
    if sys.platform == 'win32':
        args = ['"%s"' % arg for arg in args]
    os.execv(sys.executable, args)

    sys.exit()

聽起來您在原始腳本中使用了線程,這解釋了為什么只按Ctrl + C就不能破壞原始腳本。 在這種情況下,您可能想要向您的腳本添加KeyboardInterrupt異常,如下所示:

from time import sleep
def interrupt_this()
    try:
         while True:
             sleep(0.02)
    except KeyboardInterrupt as ex:
         # handle all exit procedures and data cleaning
         print("[*] Handling all exit procedures...")

之后,您應該能夠自動重新啟動相關過程(即使從腳本本身內部開始,也無需任何外部腳本)。 無論如何,如果不看相關的腳本就很難知道,所以如果您共享其中的一些腳本,也許會對我有所幫助。

暫無
暫無

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

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