Форум сайта python.su
0
Добрый день.
В принципе, приложение уже готово и работает нормально но у меня возникло сомнение в правильности его реализации.
Клиент-серверное приложение. Сервер оформлен в виде демона и работает исключительно на Linux.
Клиент на PyQT и работает только на виндовс. Взаимодействие реализованно через вызов серверных функций доступных через XML.RPC
Клиентская консоль предстовляет из себя что то вроде диспетчера задач(упр. процессами, просмотр нагрузки, и информация о ситеме).
Напрмер:
Нажимаем посмотреть список процессов. Консоль вызывает соответствующую функцию на сервере.
Сервер у себя выполняет стандартную команду линух ps aux и весь результат в виде строки возвращает клиенту.
Клиент эту строку парсит и заполняет данными соответствующую табличку в консоле.
Все это работает. Но текстовый обмен и сложный парсинг вывода каждой команды кажется мне слишком сложным и требующим кучи проверок на каждой Линукс ситеме т.к. в некоторых версиях вывод стандартных команд оболочки отличается.
Может, я чего то не знаю и есть какой то модуль для питона позволяющий получать работать с процессами системы и прочими системными компонентами? или текстовый обмен это норма?
Офлайн
0
Без исходников(мне) сложно что-то советовать. Не вижу как реализовано у вас - не представляю, чего можно улучшить…
Отредактировано (Дек. 19, 2011 15:52:10)
Офлайн
0
Суть в том, что используются собственные команды оболочки linux(ps, df, chkconfig) вывод которых перехватывается модулем subprocess и в орегинальном виде(в виде обычных строк) передается клиенту
Вот пример серверной функции получающей список всех установленных в ситеме служб(демонов):
def LIST_SERVICE():
if sys.platform == ‘linux2’:
command = ‘/sbin/chkconfig –list’;
p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE);
out = p.stdout.read().decode('utf-8');
return out;
вот результат получаемый клиентов:
aaeventd 0:off 1:off 2:off 3:off 4:off 5:off 6:off\n
acpid 0:off 1:off 2:on 3:on 4:off 5:on 6:off\n
after.local 0:off 1:off 2:off 3:off 4:off 5:off 6:off\n
….
На киенте каждая строка переберается и в нужном виде добовляется в таблицу или текстовое поле графического интерфейса.
Меня волнует в принципе это вообще нормально, что обмен идет на уровне текстовых строк или подобное реализууется как то по другому?
Офлайн
0
Может у питона есть свои какие то функции работы с такими компонентами системы как процессы, службы и нет необходимости использовать команды оболочки Linux
Офлайн
0
Для win'ды есть win32api либа(вроде из части этой win32api можно доставать как раз эти данные по процессам).
Но похоже, что для линукса все привыкли к именно таким решениям как у вас.
http://stackoverflow.com/questions/1091327/processlist
http://www.ibm.com/developerworks/aix/library/au-python/
И для пущей убедительности можно поглядеть книжку http://mirknig.com/ -> Python for Unix and Linux System Administration
Офлайн
0
Извиняюсь, конечно, но чем ssh не устраивает?
Офлайн
0
Обедающий философА что такое ssh ? :)
Извиняюсь, конечно, но чем ssh не устраивает?
Офлайн
0
Спасибо ks! Я так и думал что для Linux нечего типа win32api нет и вы это наглядно утвердили.
Жаль конечно…
Офлайн