#やりたい事
WindowsとMac両方に使える方法で実行ファイルの多重起動を防止させたい。
困っている事
wxPythonではwx.SingleInstanceChecker(self.GetTitle())とかで多重起動を防止できようですが、tkinterで既にGUIは作成してしまいました。
Tkinterでも防止する方法は何があるのでしょうか?
試した事
##fcntlを使った方法
python
import os import fcntl import time def process_lock(): lockfile = os.path.splitext(os.path.abspath(__file__))[0] + '.lock' lockfp = open(lockfile, "w") try: fcntl.flock(lockfp, fcntl.LOCK_EX | fcntl.LOCK_NB) except IOError: return return lockfp def main(): lock = process_lock() if not lock: print("lock error") exit(1) # 処理 time.sleep(360) if __name__ == '__main__': main()
##プロセスの状況をOSなどから監視する
python
# -*- coding: utf-8 -*- from os import path import subprocess # 2重起動を防ぐ file_name = path.basename(__file__) p1 = subprocess.Popen(["ps", "-ef"], stdout=subprocess.PIPE) p2 = subprocess.Popen(["grep", file_name], stdin=p1.stdout, stdout=subprocess.PIPE) p3 = subprocess.Popen(["grep", "python"], stdin=p2.stdout, stdout=subprocess.PIPE) p4 = subprocess.Popen(["wc", "-l"], stdin=p3.stdout, stdout=subprocess.PIPE) p1.stdout.close() p2.stdout.close() p3.stdout.close() output = p4.communicate()[0].decode("utf8").replace('\n','') if int(output) != 1: exit()
threading.Lock()を使用
pythorn
#main ##### #####tkinterにのフォームを作成するクラス ##### if __name__ == "__main__": # 2重起動防止 mutex = threading.Lock() mutex.acquire() # 初期状態の調整 (ファイルの確認など) ff.ConfigFile() root = ThemedTk() app = Application(master=root) app.mainloop() mutex.release()
どちらも上手くいきませんでした、、
一般的にはどのような方法を使うのが普通なのでしょうか?
まだ回答がついていません
会員登録して回答してみよう