Форум сайта python.su
Добрый день.
В принципе, приложение уже готово и работает нормально но у меня возникло сомнение в правильности его реализации.
Клиент-серверное приложение. Сервер оформлен в виде демона и работает исключительно на Linux.
Клиент на PyQT и работает только на виндовс. Взаимодействие реализованно через вызов серверных функций доступных через XML.RPC
Клиентская консоль предстовляет из себя что то вроде диспетчера задач(упр. процессами, просмотр нагрузки, и информация о ситеме).
Напрмер:
Нажимаем посмотреть список процессов. Консоль вызывает соответствующую функцию на сервере.
Сервер у себя выполняет стандартную команду линух ps aux и весь результат в виде строки возвращает клиенту.
Клиент эту строку парсит и заполняет данными соответствующую табличку в консоле.
Все это работает. Но текстовый обмен и сложный парсинг вывода каждой команды кажется мне слишком сложным и требующим кучи проверок на каждой Линукс ситеме т.к. в некоторых версиях вывод стандартных команд оболочки отличается.
Может, я чего то не знаю и есть какой то модуль для питона позволяющий получать работать с процессами системы и прочими системными компонентами? или текстовый обмен это норма?
Офлайн
Без исходников(мне) сложно что-то советовать. Не вижу как реализовано у вас - не представляю, чего можно улучшить…
Отредактировано (Дек. 19, 2011 15:52:10)
Офлайн
Суть в том, что используются собственные команды оболочки 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
….
На киенте каждая строка переберается и в нужном виде добовляется в таблицу или текстовое поле графического интерфейса.
Меня волнует в принципе это вообще нормально, что обмен идет на уровне текстовых строк или подобное реализууется как то по другому?
Офлайн
Может у питона есть свои какие то функции работы с такими компонентами системы как процессы, службы и нет необходимости использовать команды оболочки Linux
Офлайн
Для 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
Офлайн
Извиняюсь, конечно, но чем ssh не устраивает?
Офлайн
Обедающий философА что такое ssh ? :)
Извиняюсь, конечно, но чем ssh не устраивает?
Офлайн
Спасибо ks! Я так и думал что для Linux нечего типа win32api нет и вы это наглядно утвердили.
Жаль конечно…
Офлайн