Видео ролики бесплатно онлайн

Смотреть русский видео

Официальный сайт goldsoftware 24/7/365

Смотреть видео бесплатно

uscr 09.06.2012 18:57

Есть проблема!Схожу с ума.

Есть список телеканалов вида:
1
2
3
4
5
105      230.3.3.102     5678    TV1000Русскоекино       0       /tmp
106 230.3.3.98 5678 TV1000 0 /tmp
107 230.3.3.97 5678 TV1000ACTION 0 /tmp
108 230.3.3.79 5678 ZoneRomantica 0 /tmp
109 230.3.3.103 5678 ПервыйОбразовательный 0 /tmp



Нужно проверить доступность каждого, результат запомнить в базу, снять скриншот.

Конкретный код не показываю, потому, что уже переписывал всё и так и сяк и на 2 скрипта и на 3 и на 1, а проблема одинаковая - значит, дело в голове, а не в коде.



запускаю конструкцию:
 1
2
3
4
5
6
7
8
9
10
while read line
do
id=`echo $line | awk '{print $1}'`
ip=`echo $line | awk '{print $2}'`
...и так далее...
тут отладочный вывод всех переменных
...
вызов скрипта, который запускает ffmpg с нужными параметрами и пишет результат в базу. Скрипту передаю переменные, который получил с помощью awk.

done < тот_самый_файл



Ещё раз - функционал скрипта, который вызывается в цикле ранее был внесён в сам цикл, вынес я его вот почему:

Комментирую в цикле всё, кроме отладочного вывода, и получаю идеальную картину:
1
2
3
4
5
6
id=1 ip=230.3.3.84 port=5678 name=2x2 state=0 screen=/tmp
id=2 ip=230.3.4.34 port=5678 name=Пятыйканал state=0 screen=/tmp
id=3 ip=230.3.4.32 port=5678 name=Домашний state=0 screen=/tmp
id=4 ip=230.3.3.126 port=5678 name=MTVРоссия state=0 screen=/tmp
id=5 ip=230.3.4.2 port=5678 name=МузТВ state=0 screen=/tmp
id=6 ip=230.3.3.125 port=5678 name=НТВ state=0 screen=/tmp



Возвращаю вызов скрипта, отладочный вывод выглядит так:
1
2
3
4
5
6
id=1 ip=230.3.3.84 port=5678 name=2x2 state=0 screen=/tmp
id=4 ip=230.3.3.251 port=5678 name=ТВ3 state=0 screen=/tmp
id=tmp ip= port= name= state= screen=
id=29 ip=230.3.3.244 port=5678 name=ШансонТВ state=0 screen=/tmp
id=топлюс ip=0 port=/tmp name= state= screen=
id=40 ip=230.3.3.62 port=5678 name=Боец state=0 screen=/tmp


Он как будто сдвигается на несколько колонок. Причём, в файле айдишники идут по порядку (видно в "идеальном выводе"), а тут - после 1 сразу 4, потом глюк, потом ВНЕЗАПНО 29. Что происходит?

P.S.
Переписывал на разный лад, но никогда не трогал while read line do done < ввод - может в этом всё и дело?

P.P.S - это не ошибка. В "идеальном выводе" id=4 соответствует MTVРоссия, а в "кривом" - ТВ3. Исходный файл, разумеется, один и тот же.

P.P.P.S
Заменил "непоймичё" в выводе мускуля (я про исходный файл, он формируется запросом из БД) православными пробелами, получил такую отладку:

1
2
3
4
5
6
7
8
9
id=1 ip=230.3.3.84 port=5678 name=2x2 state=0 screen=/tmp
id=10 ip=230.3.4.102 port=5678 name=Россия2 state=0 screen=/tmp
id=11 ip=230.3.4.101 port=5678 name=РоссияК state=0 screen=/tmp
id=12 ip=230.3.3.242 port=5678 name=СТС state=0 screen=/tmp
id=78 ip=MTVDance port=0 name=/tmp state= screen=
id=24 ip=230.3.4.4 port=5678 name=МузыкаПервого state=0 screen=/tmp
id=230.3.3.63 ip=5678 port=Автоплюс name=0 state=/tmp screen=
id=40 ip=230.3.3.62 port=5678 name=Боец state=0 screen=/tmp
id=imalPlanet ip=0 port=/tmp name= state= screen=



Ну и дальше опять мясо...


Тэги:
+ 2 -
Похожие Поделиться

alex 09.06.2012 20:30 #
+ 0 -
Значит дело в отладочной части скрипта. Ну и так, мысли в слух, может там что с кодировкой?
uscr 09.06.2012 20:41 #
+ 0 -
Значит дело в отладочной части скрипта.

Ну я не совсем плохо же! Разумеется, скрипту передаются кривые параметры.

Ну и так, мысли в слух, может там что с кодировкой?

UTF-8
uscr 09.06.2012 20:43 #
+ 0 -
Да и в "отладочной части" одна строка - echo "id=$id ip=$ip port=$port name=$name state=$state screen=$screenpath" там ломаться нечему.
alex 09.06.2012 20:50 #
+ 0 -
Может дело в баше? :-)

use strict;
use warnings;
use DBI;

my $db = 'tv.sqlite';
my $dbh = DBI->connect("dbi:SQLite:dbname=$db", '', '');

open FL, 'tv.txt';

while () {
my ($id, $ip, $port, $name, $state, $screen) = split(/\s+/, $_);

$dbh->do( q{insert into tv (id, ip, port, name, state, screen) values (?, ?, ?, ?, ?, ?)},
{},
$id, $ip, $port, $name, $state, $screen
);
}

close FL;
alex 09.06.2012 20:55 #
+ 0 -
Только что повторил твой скрипт с твоей отладкой, все нормально отрабатывает...
alex 09.06.2012 21:10 #
+ 0 -
Я не понял, ты делаешь выборку из базы, потом что-то там "химичишь" со скриншотами и опять кладешь в базу?
uscr 09.06.2012 21:27 #
+ 0 -
Делаю выборку в файл. Файл скармливаю циклу. В цикле запускаю скрипт, который по сути - обёртка для ffmpg. ffmpg присасывается к потоку и пытается снять скриншот. Я смотрю код завершения и на его основании принимаю решение - работает канал или нет. Пробовал запускать второй скрипт в фоне - вроде как исключено влияние на цикл. Но всё равно ничего не работает.
mealsforall 10.06.2012 07:56 #
+ 0 -
А если его в режиме отладки запускать, с параметром -x, то не становится понятно, откуда баг?
uscr 10.06.2012 10:23 #
+ 0 -
"ffmpg? Попробую, но как он в принципе может влиять на цикл?" - хотел ответить я, но потом вместо вызова ffmpg сделал тупо sleep 2 - всё работает нормально. Перепишу ка я скрипт вызова на питоне...
uscr 10.06.2012 10:44 #
+ 0 -
ПРОВАЛ! После каталога для скриншотов у меня стоит символ перевода строки. Он почему то не отображается при просмотре исходного файла в редакторе и при выводе скрипта. Отладочный вывод из питончика открыл страшную правду:

['118', '230.3.3.88', '5678', '\xd0\xa2\xd0\xa0\xd0\x9e\xd0\xa1\xd0\xbe\xd1\x8e\xd0\xb7', '0', '/tmp\n']
ananas 10.06.2012 15:34 #
+ 0 -
подобные вещи лучше делать как

1
2
3
4
awk '{printf "id=%s\nip=%s\n...", $1, $2 ...}' | while read line; do
eval $line
...
done



проще отлаживать
uscr 10.06.2012 16:10 #
+ 0 -
Разве это позволило бы выявить такую гадкую ошибку?
uscr 10.06.2012 16:25 #
+ 0 -
А. Понял.

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн