如何在 python 中停止模块?
how can i stop module in python?
我有一个简单的代码。
- 按下开始按钮 -> 无限循环并清除应用程序
- 按下停止按钮 -> 控制 c 事件停止无限循环
但我想停止 test2.py
使用其他方式不控制 c 事件。
因为我在没有控制台的情况下使用 pyinstaller
创建了 .exe
文件。
所以控制 c 事件不起作用...
如何停止 test2
模块?
test.py :
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import test2
from PyQt4 import QtGui, QtCore
from win32api import GenerateConsoleCtrlEvent
from win32con import CTRL_C_EVENT
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
btn1 = QtGui.QPushButton("Start", self)
btn1.move(30, 50)
btn2 = QtGui.QPushButton("Stop", self)
btn2.move(150, 50)
btn1.clicked.connect(self.start)
btn2.clicked.connect(self.stop)
self.statusBar()
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Event sender')
self.show()
def start(self):
sender = self.sender()
self.statusBar().showMessage(sender.text())
test2.main(app)
def stop(self):
sender = self.sender()
self.statusBar().showMessage(sender.text())
GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0)
def main():
global app
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
test2.py :
def main(app):
while 1:
print "infinite loop"
app.processEvents()
提出任何异常。如果您的目标是模仿 Ctrl-C
,请使用 KeyboardInterrupt
。即替换行
GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0)
和
raise KeyboardInterrupt('You pressed the stop button.')
在 test.py
.
使用一个简单的标志:
test2.py:
active = False
def main(app):
global active
active = True
while active:
print "infinite loop"
app.processEvents()
test1.py:
class Example(QtGui.QMainWindow):
...
def stop(self):
...
test2.active = False
我有一个简单的代码。
- 按下开始按钮 -> 无限循环并清除应用程序
- 按下停止按钮 -> 控制 c 事件停止无限循环
但我想停止 test2.py
使用其他方式不控制 c 事件。
因为我在没有控制台的情况下使用 pyinstaller
创建了 .exe
文件。
所以控制 c 事件不起作用...
如何停止 test2
模块?
test.py :
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import test2
from PyQt4 import QtGui, QtCore
from win32api import GenerateConsoleCtrlEvent
from win32con import CTRL_C_EVENT
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
btn1 = QtGui.QPushButton("Start", self)
btn1.move(30, 50)
btn2 = QtGui.QPushButton("Stop", self)
btn2.move(150, 50)
btn1.clicked.connect(self.start)
btn2.clicked.connect(self.stop)
self.statusBar()
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Event sender')
self.show()
def start(self):
sender = self.sender()
self.statusBar().showMessage(sender.text())
test2.main(app)
def stop(self):
sender = self.sender()
self.statusBar().showMessage(sender.text())
GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0)
def main():
global app
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
test2.py :
def main(app):
while 1:
print "infinite loop"
app.processEvents()
提出任何异常。如果您的目标是模仿 Ctrl-C
,请使用 KeyboardInterrupt
。即替换行
GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0)
和
raise KeyboardInterrupt('You pressed the stop button.')
在 test.py
.
使用一个简单的标志:
test2.py:
active = False
def main(app):
global active
active = True
while active:
print "infinite loop"
app.processEvents()
test1.py:
class Example(QtGui.QMainWindow):
...
def stop(self):
...
test2.active = False