【发布时间】:2014-04-21 08:25:30
【问题描述】:
我需要检查 python 脚本是否已经在运行,然后从同一个正在运行的 python 脚本中调用一个方法。但它必须在同一个进程(pid)上,没有新进程。这可能吗?
我尝试了一些代码但没有成功。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Tkinter as tk
from Tkinter import *
import socket
class Main():
def mainFunc(self):
self.root = tk.Tk()
self.root.title("Main Window")
self.lbl = Label(self.root, text = "First Text")
self.lbl.pack()
openStngs = Button(self.root, text = "Open Settings", command=self.settingsFunc)
openStngs.pack()
def settingsFunc(self):
stngsRoot = Toplevel()
stngsRoot.title("Settings Window")
changeTextOfLabel = Button(stngsRoot, text = "Change Main Window Text", command=self.change_text)
changeTextOfLabel.pack()
def change_text(self):
self.lbl.config(text="Text changed")
# the get_lock from http://stackoverflow.com/a/7758075/3254912
def get_lock(process_name):
lock_socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
try:
print lock_socket
lock_socket.bind('\0' + process_name)
print 'I got the lock'
m.mainFunc()
mainloop()
except socket.error:
print 'lock exists'
m.settingsFunc()
mainloop()
# sys.exit()
if __name__ == '__main__':
m=Main()
get_lock('myPython.py')
【问题讨论】:
-
我认为这是不可能的。 Python 不是像 C/C++ 这样的编译语言,你可以从它的内存地址调用一个函数(如果你不在同一个内存空间,这也会非常复杂)。我认为您可以使用其他方法实现您想做的任何事情。