スクリプト (Python 3) 用のウォッチドッグ タイマーを作成しました。これにより、問題が発生した場合に実行を停止できます (以下のコードには示されていません)。ただし、Python のみを使用して (外部スクリプトを使用せずに) スクリプトを自動的に再起動できるようにしたいと考えています。コードはクロスプラットフォーム互換である必要があります。
サブプロセスと execv ( os.execv(sys.executable, ['python'] + sys.argv)
) を試しましたが、Windows で非常に奇妙な機能が見られます。コマンド ラインを開き、スクリプト ("python myscript.py") を実行します。スクリプトは停止しますが終了せず (タスク マネージャーで確認)、Enter キーを 2 回押さない限り再起動しません。自動的に動作するようにしたいと思います。
助言がありますか?ご協力いただきありがとうございます!
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()