スクリプト(Python 3)用のウォッチドッグタイマーを作成しました。これにより、何かがうまくいかなかった場合(以下のコードでは表示されません)、実行を停止できます。しかし、私はPython(外部スクリプトなし)だけを使ってスクリプトを自動的に再起動することができます。コードはクロスプラットフォームと互換性がある必要があります。Pythonスクリプトの自己再起動
私はサブプロセスとexecv(os.execv(sys.executable, ['python'] + sys.argv)
)を試しましたが、Windowsでは非常に奇妙な機能があります。私はコマンドラインを開き、スクリプト( "python myscript.py")を実行します。スクリプトは停止しますが、終了しません(タスクマネージャによって確認されます)。Enterを2回押しない限り、スクリプト自体は再起動しません。私はそれが自動的に動作するようにしたいと思います。
提案がありますか?ご協力いただきありがとうございます!あなたは、単にはCtrl +Cを押したときに、あなたがあなたの元のスクリプトを破ることができない理由を説明し、あなたの元のスクリプトにスレッドを使用しているよう
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()
ありがとうございました!私が持っている問題は、表示されていないスクリプトではなく、ポストされたコードである。それは、私がWindowsでそれを実行するためにスクリプトのクロックを倍増するとうまくいくことが判明しますが、コマンドラインから "python myscript.py"と入力すると機能しません。 Linuxでは現在の問題はありません。 – NJC