|R|U|D|E|N|
Дек. 19, 2011 12:12:08
Добрый день.
В принципе, приложение уже готово и работает нормально но у меня возникло сомнение в правильности его реализации.
Клиент-серверное приложение. Сервер оформлен в виде демона и работает исключительно на Linux.
Клиент на PyQT и работает только на виндовс. Взаимодействие реализованно через вызов серверных функций доступных через XML.RPC
Клиентская консоль предстовляет из себя что то вроде диспетчера задач(упр. процессами, просмотр нагрузки, и информация о ситеме).
Напрмер:
Нажимаем посмотреть список процессов. Консоль вызывает соответствующую функцию на сервере.
Сервер у себя выполняет стандартную команду линух ps aux и весь результат в виде строки возвращает клиенту.
Клиент эту строку парсит и заполняет данными соответствующую табличку в консоле.
Все это работает. Но текстовый обмен и сложный парсинг вывода каждой команды кажется мне слишком сложным и требующим кучи проверок на каждой Линукс ситеме т.к. в некоторых версиях вывод стандартных команд оболочки отличается.
Может, я чего то не знаю и есть какой то модуль для питона позволяющий получать работать с процессами системы и прочими системными компонентами? или текстовый обмен это норма?
ks
Дек. 19, 2011 15:51:12
Без исходников(мне) сложно что-то советовать. Не вижу как реализовано у вас - не представляю, чего можно улучшить…
|R|U|D|E|N|
Дек. 19, 2011 16:39:30
Суть в том, что используются собственные команды оболочки 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
….
На киенте каждая строка переберается и в нужном виде добовляется в таблицу или текстовое поле графического интерфейса.
Меня волнует в принципе это вообще нормально, что обмен идет на уровне текстовых строк или подобное реализууется как то по другому?
|R|U|D|E|N|
Дек. 19, 2011 16:41:33
Может у питона есть свои какие то функции работы с такими компонентами системы как процессы, службы и нет необходимости использовать команды оболочки Linux
ks
Дек. 19, 2011 18:25:06
Для win'ды есть win32api либа(вроде из части этой win32api можно доставать как раз эти данные по процессам).
Но похоже, что для линукса все привыкли к именно таким решениям как у вас.
http://stackoverflow.com/questions/1091327/processlisthttp://www.ibm.com/developerworks/aix/library/au-python/И для пущей убедительности можно поглядеть книжку
http://mirknig.com/ -> Python for Unix and Linux System Administration
Обедающий философ
Дек. 20, 2011 19:30:34
Извиняюсь, конечно, но чем ssh не устраивает?
ks
Дек. 21, 2011 16:30:58
Обедающий философ
Извиняюсь, конечно, но чем ssh не устраивает?
А что такое ssh ? :)
|R|U|D|E|N|
Дек. 21, 2011 16:37:40
Спасибо ks! Я так и думал что для Linux нечего типа win32api нет и вы это наглядно утвердили.
Жаль конечно…