Tkinter Window 在脚本 运行 服务器后冻结
Tkinter Window Freezes after Running a Server from Script
我正在制作一个程序来创建一个单独的 python 网络服务器,该服务器是:
import os, sys
from http.server import HTTPServer, CGIHTTPRequestHandler
webdir = '.'
port = 8000
print('Server Now Running')
os.chdir(webdir)
srvraddr = (('' , port))
srvrobj = HTTPServer(srvraddr, CGIHTTPRequestHandler)
srvrobj.serve_forever()
然后原始程序从命令行运行该服务器:
def runServer(self):
os.system('Webserver.py')
所有这些都是通过 Tkinter window 中的按钮完成的。调用此函数时,Tkinter window 冻结并且无法按下下一个按钮(会通过服务器在 Safari 中拉出本地 html 文件)。
我环顾四周,看起来我可能需要穿线或其他东西...
我对如何处理这件事一无所知。有需要的可以提供更多我的原创程序(有点笨拙)
我正在寻找一个简单的解决方案,或者可能是一个具体的参考资料,以帮助我朝着正确的方向前进。
Python 非常新(3 个月),所以请牢记这一点。
由于被调用程序的退出代码是函数os.system的return值,所以程序会一直阻塞,直到被调用程序退出。
请尝试使用非阻塞 subprocess.Popen。
import subprocess
s = subprocess.Popen(['Webserver.py'])
或者可能需要 python
才能启动脚本
s = subprocess.Popen(['python', 'Webserver.py'])
或者你可以 运行
s = subprocess.Popen(['python3', '-m', 'http.server', '--cgi', '8000'])
稍后您可以停止进程
s.kill()
Popen
(没有参数 shell=True
)期望参数作为列表
- 关闭程序后子进程仍然有效,因此您必须在关闭程序之前杀死它们。
我正在制作一个程序来创建一个单独的 python 网络服务器,该服务器是:
import os, sys
from http.server import HTTPServer, CGIHTTPRequestHandler
webdir = '.'
port = 8000
print('Server Now Running')
os.chdir(webdir)
srvraddr = (('' , port))
srvrobj = HTTPServer(srvraddr, CGIHTTPRequestHandler)
srvrobj.serve_forever()
然后原始程序从命令行运行该服务器:
def runServer(self):
os.system('Webserver.py')
所有这些都是通过 Tkinter window 中的按钮完成的。调用此函数时,Tkinter window 冻结并且无法按下下一个按钮(会通过服务器在 Safari 中拉出本地 html 文件)。
我环顾四周,看起来我可能需要穿线或其他东西...
我对如何处理这件事一无所知。有需要的可以提供更多我的原创程序(有点笨拙)
我正在寻找一个简单的解决方案,或者可能是一个具体的参考资料,以帮助我朝着正确的方向前进。
Python 非常新(3 个月),所以请牢记这一点。
由于被调用程序的退出代码是函数os.system的return值,所以程序会一直阻塞,直到被调用程序退出。
请尝试使用非阻塞 subprocess.Popen。
import subprocess
s = subprocess.Popen(['Webserver.py'])
或者可能需要 python
才能启动脚本
s = subprocess.Popen(['python', 'Webserver.py'])
或者你可以 运行
s = subprocess.Popen(['python3', '-m', 'http.server', '--cgi', '8000'])
稍后您可以停止进程
s.kill()
Popen
(没有参数shell=True
)期望参数作为列表- 关闭程序后子进程仍然有效,因此您必须在关闭程序之前杀死它们。