我为我的脚本(Python 3)创建了一个看门狗定时器,它允许我在出现任何问题时停止执行(下面的代码中没有显示)。但是,我希望能够仅使用Python(无外部脚本)自动重启脚本。代码需要跨平台兼容。
我尝试过subprocess和execv(os.execv(sys.executable, ['python'] + sys.argv)
),但是我在Windows上看到了非常奇怪的功能。我打开命令行,然后运行脚本(" python myscript.py")。脚本停止但不退出(通过任务管理器验证),除非我按两次输入,否则它不会重新启动。我希望它能自动运行。
有什么建议吗?谢谢你的帮助!
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()
答案 0 :(得分:0)
听起来您在原始脚本中使用了线程,这解释了为什么只需按 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...")
在此之后,您应该能够自动重新启动相关过程(即使是在脚本本身内,也没有任何外部脚本)。无论如何,在没有看到相关脚本的情况下有点难以理解,所以如果你分享一些相关脚本,也许我可以提供更多帮助。