Форум сайта python.su
0
Добрый день. Помогите совместить два скрипта, для реализации сервера печати, который висит в системном трее.
По отдельности работают, а вместе не хотят.
#---------------------------- import socket import threading import tempfile import win32api import win32print import wx.adv import wx TRAY_TOOLTIP = 'Name' TRAY_ICON = 'icon.png' def create_menu_item(menu, label, func): item = wx.MenuItem(menu, -1, label) menu.Bind(wx.EVT_MENU, func, id=item.GetId()) menu.Append(item) return item class TaskBarIcon(wx.adv.TaskBarIcon): def __init__(self, frame): self.frame = frame super(TaskBarIcon, self).__init__() self.set_icon(TRAY_ICON) self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, self.on_left_down) def CreatePopupMenu(self): menu = wx.Menu() create_menu_item(menu, 'Site', self.on_hello) menu.AppendSeparator() create_menu_item(menu, 'Exit', self.on_exit) return menu def set_icon(self, path): icon = wx.Icon(path) self.SetIcon(icon, TRAY_TOOLTIP) def on_left_down(self, event): print ('Tray icon was left-clicked.') def on_hello(self, event): print ('Hello, world!') def on_exit(self, event): wx.CallAfter(self.Destroy) self.frame.Close() class App(wx.App): def OnInit(self): frame=wx.Frame(None) self.SetTopWindow(frame) TaskBarIcon(frame) return True def main(): app = App(False) app.MainLoop() if __name__ == '__main__': main() bind_ip = "127.0.0.1" bind_port = 9999 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((bind_ip,bind_port)) server.listen(5) print ('[*] Listening on %s:%d' % (bind_ip,bind_port)) # this is our client-handling thread def handle_client(client_socket): # print out what the client sends request = client_socket.recv(1024) print ("[*] Received: %s" % request) # send back a packet client_socket.send("ACK!") client_socket.close() while True: client,addr = server.accept() data = client.recv(1024).decode() print(data) print ("[*] Accepted connection from: %s:%d" % (addr[0],addr[1])) txtprint = str(data) print(txtprint) filename = tempfile.mktemp (".txt") print(txtprint) open (filename, "w").write (txtprint) win32api.ShellExecute ( 0, "printto", filename, '"%s"' % win32print.GetDefaultPrinter (), ".", 0 ) # spin up our client thread to handle incoming data client_handler = threading.Thread(target=handle_client,args=(client,)) client_handler.start() #------------------------------
Прикреплённый файлы:
Сервер2.py (2,6 KБ)
Офлайн
253
mario512Надо конкретно указывать что вас не устраивает в работе скрипта.
а вместе не хотят.
Офлайн
0
doza_andДа, так и написал. Задача заключается в том что скрипт должен сидеть в трее и принимать запросы с заданиями на печать.
Складывается впечатление что вы записали один скрипт за другим. Как написали, так и будет работать. Сначала полностью выполнится и завершится один скрипт, потом другой.
Офлайн
44
wx.Timer ?
и вставьте ссылку на его url Офлайн
253
AD0DE412Таймер тут совершенно не нужен. Поллинг сокета это уж совсем некультурно. Либо как тут пытались сделать с тредами. Но конечно не так как ТС пробовал сделать. Тут три длительные процедуры. Ожидание клиентов, получение от них данных и печать. Так что нужны очереди синхронизация и прочая радость.
wx.Timer ?
Отредактировано doza_and (Сен. 1, 2019 08:24:32)
Офлайн
44
doza_and это все замечательно (спсб, вы слишком хорошего мнения обо мне, я половину не понимаю о чем вы (хорошо бы половину если чесно, но я буду работать над этим)) но что меня смущеет так это:
... # print out what the client sends request = client_socket.recv(1024) print ("[*] Received: %s" % request) # send back a packet client_socket.send("ACK!") client_socket.close() while True: #-------------------------------------------->>> КАК ПОПАСТЬ ОТ СЮДА client,addr = server.accept() data = client.recv(1024).decode() print(data) print ("[*] Accepted connection from: %s:%d" % (addr[0],addr[1])) txtprint = str(data) print(txtprint) filename = tempfile.mktemp (".txt") print(txtprint) open (filename, "w").write (txtprint) win32api.ShellExecute ( 0, "printto", filename, '"%s"' % win32print.GetDefaultPrinter (), ".", 0 ) #-------------------------------------------->>> СЮДА # spin up our client thread to handle incoming data client_handler = threading.Thread(target=handle_client,args=(client,)) client_handler.start()
doza_and
Второй скрипт кстати некорректен нет синхронизации основного и вспомогательного треда
и вставьте ссылку на его url Отредактировано AD0DE412 (Сен. 1, 2019 19:57:41)
Офлайн
253
AD0DE412Если коротко то никак.
но что меня смущеет так это:
Офлайн