2015-07-01 2 views
0

Hi,python - как форматировать вывод сокета recv()?

Эта функция печатает выходные данные сокета recv(). В моем коде сокет подключается к телевизору Samsung.

def connection_status(self): 

     connection_status = sock.recv(64) 
     label_connection_status = "Status: ", connection_status 

     label_connection_status = Label(self.master, text= label_connection_status) 
     label_connection_status.grid(row=7, column=3, columnspan=4, padx=(15,0), ipady=8, sticky=W) 

Ярлык дает мне это: Screenshot of label

С print("Status: ", connection_status) я получаю это: ('Status: ', '\x00\x0c\x00iapp.samsung\x04\x00d\x00\x01\x00')

И с print(label_connection_status) я получаю это: .139719774023552

Мои вопросы:

  1. Как форматировать вывод и почему вывод print(label_connection_status).139719774023552 ??

  2. Я хочу написать "Status: Connected" в ярлыке, если RECV() возвращает что-то и "Статус: Disconnected", если RECV() возвращает "" (не возвращаем anythink)

  3. Я хочу, чтобы обновить состояние соединения с recv() каждые 1 секунда

Пожалуйста, помогите! И извините за мой плохой английский. Спасибо.

ответ

0

Что касается второго и третьего вопросов, которые вы могли бы сделать что-то вроде: sock.settimeout (1)

try: 
    data = sock.recv(64) 
    print 'Status: Connected' 
except socket.timeout: 
    data = '' 
    print 'Statuc: Disconnected' 

В котором установить тайм-аут до 1 секунды, и если соединение не будет он напечатает отключен ,

Что касается этикетки, этикетка от Tkinter вправо? Если я правильно помню, что номер представляет ваше окно tkinter (каждое окно и дети окна получают номера для представления их в операционной системе). Я точно не помню, как это работает, но я уверен, что это то, что у вас есть. Если вам нужен текст метки, вы должны использовать label_name ["text"] или label_name.cget ("text").

Чтобы ответить на ваши вопросы Followup, вот код, поместить этот раздел в вашем инициализации функции

#Code to put in your __init__ function 
self.connection_label = Label(self.master, text= '') 
self.connection_label.grid(row=7, column=3, columnspan=4, padx=(15,0), ipady=8, sticky=W) 
self.sock = socket.socket() 
self.sock.connect(('127.0.0.1', 5555)) 
self.sock.settimeout(1) 

(не забудьте изменить свой IP-адрес и порт) и здесь есть функция, которую вы необходимо:

def connection_status(self): 
    try: 
     data = self.sock.recv(64) 
     self.connection_label['text'] = 'Status: Connected' 
    except socket.timeout: 
     data = '' 
     self.connection_label['text'] = 'Status: Disconnected' 
    #This makes the program call this every 1000 milliseconds 
    self.master.after(1000, self.connection_status, self.master) 

строка в нижней части делает вызов программы, которые функционируют каждые х милисекунд, который является в данном случае 1000 так 1 секунду. Также не подделывайте, чтобы фактически вызвать функцию connection_status в вашей функции init.

+0

Спасибо за ответ, но я получаю эту ошибку: кроме socket.timeout: ^ SyntaxError: неверный синтаксис – PepinCZ

+0

я его в опр. И да, ярлык от Tkinter – PepinCZ

+0

И как записать обновленный статус на этикетку Tk? – PepinCZ

Смежные вопросы