Я делаю программу, которая создает отдельный питон веб-сервер, сервер существует:TkInter Окно замерзает после запуска сервера из скрипта
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 замерзает, и следующая кнопка не может быть нажата (одна из них будет вытаскивать локальный файл html в Safari через сервер).
Я посмотрел вокруг, и это похоже, что я, возможно, потребуется многопоточность или что-то ...
Я остаюсь невежественный, как я бы об этом. При необходимости может предоставить больше моей оригинальной программы (это немного неуклюже).
Я ищу простое решение или, может быть, конкретную ссылку, чтобы получить направление в правильном направлении.
Очень новый (3 месяца) на Python, так что имейте это в виду.
при запуске 'os.system', тогда он ждет, пока он не кончится. И таким образом 'mainloop' не может выполнять свою работу - получает событие key/mouse, отправляет виджеты, перерисовывает виджеты и т. Д. Вам нужен модуль' threading' или 'subprocess' для запуска сервера как отдельный поток/процесс, а затем' mainloop 'будет делать свою работу. – furas
исследуя это сейчас ... не могли бы вы дать мне представление о том, как это будет выглядеть в этой программе? – peer
[threading] (https://docs.python.org/3.5/library/threading.html) и [подпроцесс] (https://docs.python.org/3.5/library/subprocess.html) – furas