Пожалуйста, найдите ниже код, как он бросает ошибку — global name 'webserver' is not defined
.
import SimpleHTTPServer
import SocketServer
import os
from threading import Thread
import threading
class WebServer(Thread):
def __init__(self, stream_path):
"""
Class to create a Web server and add given folder to the web server which is passed as an argument.
In this case it creates the web server to the incoming streams pushed by VLC to temp folder
"""
Thread.__init__(self)
self.stream_path = stream_path
def run(self):
global WebServer
"""
This method is built in Thread object method invoked by start()
and the code which is under run() will be executed.
"""
os.chdir(self.stream_path)
PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
print "function thread", threading.currentThread()
httpd.serve_forever()
print "test1"
def create_web_server(self,stream_path):
global WebServer
"""
This method is to create the web server to a given path
"""
obj1 = WebServer(self,stream_path)
obj1.start()
print "server created"
def stop_web_server(self):
cmd='tskill python /A'
os.system(cmd)
if __name__ == '__main__':
create_web_server("","C:\QED")
Вам не нужны две
global WebServer
строки в коде.global
Ключевое слово используется для предоставления доступа на запись к глобальной переменной, и у вас нет глобальной переменной с именемWebServer
.Ваш код должен выглядеть следующим образом, чтобы устранить ошибку, хотя в своем состоянии он все равно будет выдавать ошибки, потому что ваш код имеет несколько проблем, включая вызов
create_web_server
метода сам по себе, так как это метод, который должен быть запущен наWebServer
объекте.Я включил рабочий пример прототипа вашего кода в нижней части моего сообщения.
Вот упрощенная версия вашего кода, которая должна делать то же самое (служить каталогом с базовым
SimpleHTTPRequestHandler
).Он запускает поток в
daemon
режиме, так что он может быть прерван с Ctrl— C. Я удалил несколько методов, поскольку они, казалось, не служили цели в вашем исходном коде, и чтобы показать вам базовую структуру того, как вашWebServer
класс, вероятно, будет выглядеть.И чтобы сделать следующий шаг, вам не нужно создавать
Thread
подкласс. Это разрешено, потому что это кажется более «естественным» разработчикам, которые знакомы с Java, где подклассыThread
или реализацияRunnable
является стандартной практикой.Вы можете просто сделать что-то вроде: