2015-10-26 8 views
-1

Я использую пакет gsmmodem и пытаюсь получить ответ от кода USSD, который я отправляю. Выполнение кода USSD отлично работает, но ответ не в правильном формате (не читаемый человеком). Я хочу получить его в читаемом формате.Python читает ответ ussd с помощью GsmModem в удобочитаемой строке (ru)

Пожалуйста, проверьте код здесь

from __future__ import print_function 
import logging 
PORT = 'COM11' 
BAUDRATE = 921600 
USSD_STRING = '*111#' 
PIN = None # SIM card PIN (if any) 

from gsmmodem.modem import GsmModem 

def main(): 
    print('Initializing modem...') 
    modem = GsmModem(PORT, BAUDRATE) 
    modem.connect(PIN) 
    modem.waitForNetworkCoverage(10) 
    print('Sending USSD string: {0}'.format(USSD_STRING)) 
    response = modem.sendUssd(USSD_STRING) # response type: gsmmodem.modem.Ussd 
    print('USSD reply received: {0}'.format(response.message)) 
    if response.sessionActive: 
     print('Closing USSD session.') 
     # At this point, you could also reply to the USSD message by using response.reply() 
     response.cancel() 
    else: 
     print('USSD session was ended by network.') 
    modem.close() 

if __name__ == '__main__': 
    main() 

Ссылка для кода http://pastebin.com/SvYptykS

+0

Никто не знает этот ответ через стек-перелива? wow –

+0

Mine даже не дает мне ответа, теперь у вас есть решение? – saviour123

ответ

-1

Вы получаете ответ в gsm hexadecimal типа. Таким образом, вы должны декодировать строку response.message в правильном формате и encode после этого в формате для чтения человеком, например utf-8.

Итак, после того, как

response = modem.sendUssd(USSD_STRING) 

Запись:

ussd_message = unicode(response.message.decode('hex'), 'utf-16-be').encode('utf8') 
print('USSD reply received: {0}'.format(ussd_message)) 

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

  • Нет связанных вопросов^_^