Нужно написать клиент-серверное приложение именно на python.
В чём функциональность заключается, не особо важно... особой роли не играет. Хочу использовать RPC - вижу много разных стандартов - больше всего нравится json-rpc (вроде бы и компактный, и парсится легко).
В стандартной библиотеке есть модуль json - если ему передать json-строку по типу:
{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
То на выходе получается словарь jsondict:
{'params': [42, 23], 'jsonrpc': '2.0', 'method': 'subtract', 'id': 1}
То есть даже парсить его вручную не надо... есть стандартный библиотечный модуль. Удобно. Я получаю jsondict['method'] - строка, содержащая имя метода, jsondict['params'] - список параметров, ну и соответственно jsondict['id']
Вопрос - как мне этот метод _безопасно_ запустить? Ну например предыстория такая... через socket s клиент соединился с сервером, отправляет ему s.send(somejsonstring.encode('ascii')), например... сервер получает эту строку и парсит, получает словарь.
Я могу, например, использовать:
eval(methodstring + '(' + param1 + ',' + param2 + .... + paramN + ')'
Но eval использовать как-то боязно. :) Вдруг кто подкинет строчку в названии метода 'import os; os.system(«rm -rf /*»)' ?
Как сделать это безопасно?.. запустить метод (если он существует), зная его имя в виде строки и список параметров...?