Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > human readable текст как результат работы утилиты


Автор: semibug 12.9.2012, 09:32
Скажите ребята, это нормально - интерпретировать в своей программе стандартный вывод другой программы, расчитаный на человека. Судя по различным скриптам попадавшим под руку, это норма для Linux. Сам не давно начал программировать под Linux и кажется, что здесь, что-то не так. Ладно бы разобрать четко оформленный xml, а тут какие то строки, которые того и гляди заменят разработчики по своему желанию, как с этим жить?

Автор: boostcoder 12.9.2012, 10:39
пример строк?

Автор: Фантом 12.9.2012, 10:53
Цитата(semibug @  12.9.2012,  10:32 Найти цитируемый пост)
Скажите ребята, это нормально - интерпретировать в своей программе стандартный вывод другой программы, расчитаный на человека. Судя по различным скриптам попадавшим под руку, это норма для Linux. Сам не давно начал программировать под Linux и кажется, что здесь, что-то не так.


Да нет, все так, это совершенно стандартное явление. Вывод в текстовый файл не обязательно предназначен именно для человека; как правило, его стараются организовать таким образом, чтобы, с одной стороны, он легко разбирался программно, с другой - его можно было бы при необходимости прочитать и подредактировать вручную.

Цитата(semibug @  12.9.2012,  10:32 Найти цитируемый пост)
Ладно бы разобрать четко оформленный xml, а тут какие то строки, которые того и гляди заменят разработчики по своему желанию, как с этим жить? 


Опыт существования UNIX-подобных систем показывает, что как раз эти "какие-то строки" поддерживаются намного дольше, чем все другие методы хранения конфигурационных данных.  smile Впрочем, у текстовых конфигов тоже есть свои стандартные правила оформления, от XML они принципиально отличаются не так уж сильно.

Автор: xvr 12.9.2012, 10:57
Цитата(semibug @  12.9.2012,  09:32 Найти цитируемый пост)
Скажите ребята, это нормально - интерпретировать в своей программе стандартный вывод другой программы, расчитаный на человека.

Нет, ненормально 

Цитата(semibug @  12.9.2012,  09:32 Найти цитируемый пост)
Судя по различным скриптам попадавшим под руку, это норма для Linux. 

И это тоже так  smile 

Цитата(semibug @  12.9.2012,  09:32 Найти цитируемый пост)
как с этим жить?

Очень настойчиво и регулярно  smile 

Обычно в большом дружном коллективе, где разные люди пишут разные скрипты, находится немало людей, которые делают тулзы которые парсят вывод других тулзов. Причем авторы этих 'других' ни сном ни духом не в курсе, что их выводы кто то там парсит. А потом начинаются забеги по офису с вырыванием волос на голове (иногда на чужой голове) с воплями - 'Кто уронил мою тулзу, да так, что осколки до сих пор собрать не могу ??!!!'

Когда на головах кончаются волосы начинается процесс осознания, что не только люди читают ваши ваши выдачи, и внедрение специально для 'не людей' машинно-читаемых форматов (это может быть все тот же текст, но на него налагают некоторые ограничения. В идеале делают альтернативный вывод в xml и пр)

Автор: semibug 12.9.2012, 11:50
 smile 

Цитата(boostcoder @  12.9.2012,  10:39 Найти цитируемый пост)
пример строк? 

например вывод ping:
Код

semibug@ubuntu:~$ ping -c3 -w3 google.com
PING google.com (173.194.35.194) 56(84) bytes of data.
64 bytes from mobilemaps.clients.google.com (173.194.35.194): icmp_req=1 ttl=57 time=6.22 ms
64 bytes from mobilemaps.clients.google.com (173.194.35.194): icmp_req=2 ttl=57 time=5.07 ms
64 bytes from mobilemaps.clients.google.com (173.194.35.194): icmp_req=3 ttl=57 time=3.55 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.552/4.951/6.226/1.095 ms

Вывод затем парсится так (проверяем наличие интернета):
Код

grep received | sed -e "s/.*mitted, //" | sed -e "s/ recei.*//"

Хотя и работает, но как то ссыкотно. Что там на уме у YOSHIFUJI Hideaki (или кто там счас сборкой пинга занимается) не понятно.

Цитата(Фантом @  12.9.2012,  10:53 Найти цитируемый пост)
Да нет, все так, это совершенно стандартное явление.

Цитата(xvr @  12.9.2012,  10:57 Найти цитируемый пост)
Нет, ненормально 

вот и я о том же..

Были бы мои программы, вывел бы в xml, и читать можно и все на своих местах для разбора.. 
Для Unix утилит надеюсь не придет в голову кому то радикально менять формат вывода..
А для самоделок, видимо придется расчитывать на авось..

Всем спасибы!



Автор: borisbn 12.9.2012, 21:26
Как вариант задавать regex снаружи. При смене формата вывода утилиты меняется только настроечный файл (ессно, если требуемые данные остались в выводе после изменений) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)