从脚本

时间:2017-01-04 07:09:59

标签: python multithreading tkinter webserver freeze

我正在创建一个程序来创建一个单独的python Web服务器,服务器是:

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窗口中的按钮完成的。调用此函数时,Tkinter窗口会冻结,并且无法按下下一个按钮(可以通过服务器在Safari中提取本地html文件)。

我环顾四周,看起来我可能需要穿线或其他东西......

我对于如何解决这个问题一无所知。如果有必要,可以提供更多我的原始程序(它有点笨拙)。

我正在寻找一个简单的解决方案,或者可能是一个特定的参考,以帮助我朝着正确的方向前进。

非常新(3个月)到Python,所以请记住这一点。

2 个答案:

答案 0 :(得分:2)

使用subprocess

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)期望参数为列表
  • 关闭程序后,
  • 程序子进程仍然有效,所以你必须在关闭程序之前杀死它们。

答案 1 :(得分:1)

由于被调用程序的退出代码是函数os.system的返回值,程序将被阻塞,直到被调用的程序退出。

请尝试使用非阻止subprocess.Popen