Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Perl скрипт - вывод промежуточных результатов (Dim)
Author Message
Dim
Заглянувший



Joined: 11 Nov 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Sat Nov 11, 2006 8:41 pm (написано за 8 минут 56 секунд)
   Post subject: Perl скрипт - вывод промежуточных результатов
Reply with quote

Добрый вечер всем.

Несколько дней пользую Денвер, спасибо, нравится ;) Но вот есть такая проблемка : мой скрипт (линкчекер) в процессе работы (проверка ссылок на страницах какого -либо сайта, например) должен выводить на экран краткую информацию о каждом очередном проверенном URL - на экране видим растущий список. Делается это просто в виде print qq|# URL Code Time|;... Это работало раньше на домашней машине (использовал Sambar) и работает на реальном сайте (под Апачем, конечно). Но вот Апач денверовский после паузы выбрасывает лишь всю информацию (вышеупомянутый список и финальный отчет) по окончанию работы скрипта.

Какую опцию и где изменить, чтобы было, как надо?

Спасибо.
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 11:02 am (спустя 14 часов 20 минут; написано за 11 секунд)
   Post subject:
Reply with quote

пропишите в начале perl скрипта "$| = 1;"
Back to top
View user's profile Send private message Send e-mail
Dim
Заглянувший



Joined: 11 Nov 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 11:36 am (спустя 34 минуты; написано за 1 минуту 36 секунд)
   Post subject:
Reply with quote

Это имеется само собой, даже $|++ в каждой итерации ;). Но ведь ясно, что дело не в этом, поскольку работает везде, но НЕ под Денвером.
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 4:04 pm (спустя 4 часа 27 минут; написано за 4 минуты 33 секунды)
   Post subject:
Reply with quote

Хм. Тогда могу предложить два направления.

1). Много ли у вас данных выводится? Если не много (ну то есть несколько строк), то надо иметь ввиду, что у IE есть баг, при котором он не отображает инфу (даже при её получении) пока данных не станет достаточно много. То есть, кароче говоря, если данных мало, вставляюте между ними добрую порцию пробелов или HTML-комментариев. Либо просто откройте другой браузер.

2). Если таки ничего не помогает. Попробуйте написать простой скрипт, который с периодичностью в секунды 3 (sleep 3) выводит какие-нибудь данные. Всё это дело проверьте на вашем хостинге и на Денвере. Если этот простой скрипт на хостинге работает, а на Денвере - нет, прикрепляйте его сюда. Я посмотрю.
Back to top
View user's profile Send private message Send e-mail
Dim
Заглянувший



Joined: 11 Nov 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 4:45 pm (спустя 41 минуту; написано за 8 минут 10 секунд)
   Post subject:
Reply with quote

1) Мой агент - Оpera, иногда FF, а IE я использую только для тестирования внешнего вида созданнных страниц. Про указанную особенность IE знаю, кажется, в контексте вывода "своих" страниц ошибок (что если она содержит менее пол кило или кило (не помню), то он ее "не берет").

2) Дык sleep() в скрипте не используется. Да и не будет, наверное, дома работать под Windows.

Др. идея только что появилась - я еще на др. диск перешел, где поставил XP. До этого до сих пор работал под 98 (привык ;) Надо проверить, не ХР ли виновата.
Back to top
View user's profile Send private message
Dim
Заглянувший



Joined: 11 Nov 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 5:29 pm (спустя 43 минуты; написано за 3 минуты 3 секунды)
   Post subject:
Reply with quote

Мдя... XP, получается, виновата. Поставил сюда Sambar и получил под ним тот же результат.

Что это - системный кэш какой-то? lol
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 5:36 pm (спустя 7 минут; написано за 55 секунд)
   Post subject:
Reply with quote

Dim wrote:
2) Дык sleep() в скрипте не используется. Да и не будет, наверное, дома работать под Windows.
Sleep в Perl будет работать везде. Что в Windows, что в Linux.
Dim wrote:
Что это - системный кэш какой-то? lol
Это не системный кеш. Это, похоже, браузеры.

Пробуйте:
Code (perl): скопировать код в буфер обмена
#!/usr/bin/perl

use warnings;
use strict;

$| = 1;

print (www.perldoc.com/perl5.6/pod/func/print.html) "Content-Type: text/html\n\n";

my $buffer = qq (www.perldoc.com/perl5.6/pod/func/qq.html)~
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxx                                                               xxxx -->
<!-- xxxx Fill buffers to force browsers to display the page right now! xxxx -->
<!-- xxxx                                                               xxxx -->
<!-- xxxx                                                               xxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxx                                                               xxxx -->
<!-- xxxx Fill buffers to force browsers to display the page right now! xxxx -->
<!-- xxxx                                                               xxxx -->
<!-- xxxx                                                               xxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
~;

for ( 1..10 ) {
        print (www.perldoc.com/perl5.6/pod/func/print.html) "Строка №$_<br />$buffer";
        sleep (www.perldoc.com/perl5.6/pod/func/sleep.html) 2;
}
Back to top
View user's profile Send private message Send e-mail
Dim
Заглянувший



Joined: 11 Nov 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 6:32 pm (спустя 55 минут; написано за 7 минут 36 секунд)
   Post subject:
Reply with quote

Это работает. Раньше думал, что sleep только для *nix. Спасибо, буду знать.

Однако, для понимания моей проблемы это ничего не дает. В 98-й в любом броузере все ОК, в XP - нет.

Sleep явно определяет продолжительность пауз между появлением строк, а у меня пауза зависит от времени обработки очередной страницы. На localhost эти паузы очень малы, конечно, но все равно видно, что вывод идет последовательным добавлением строк. Под XP этого нет ни с Sambar, ни с Денвером - длинная пауза, а потом сразу - полный результат. Чтобы полностью убедиться, надо еще на диск с 98 поставить Денвер.
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 6:50 pm (спустя 17 минут; написано за 2 минуты 28 секунд)
   Post subject:
Reply with quote

Да чего вы к sleep-то привязались? Я привёл sleep только для наглядности работы. Оказалось - всё работает. Напишите вместо sleep "for (1..10000000) {};". Результат будет тот же.

Надо добавить хорошую порцию коментариев к каждой выводимой единице. Просто добавьте комментарии к вашему коду. И всё.
Back to top
View user's profile Send private message Send e-mail
Dim
Заглянувший



Joined: 11 Nov 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 8:00 pm (спустя 1 час 10 минут; написано за 8 минут 36 секунд)
   Post subject:
Reply with quote

>"Оказалось - всё работает."

Sleep - да, работает. Еще раз пасиба. Но зачем мне эти ненужные "порции" даже с циклом for?

Ведь не работает так, как на реальном сервере или под 98 - без искусственных задержек. Там я просто пишу print qq![промежуточный результат]! - и усё : вижу очередной URL, код возврата, время, потраченное на парсинг и спеллчекинг (когда выставлена соотв. опция), если возврат 200.

Вообще-то, мне эта фича нужна не только для наглядности, но и для гарантии того, что скрипт в броузере раньше времени не заткнется, если время ожидания вывода будет превышено. Ведь проверка реальных ресурсов с сотнями или тысячами страниц занимает много времени.
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Sun Nov 12, 2006 11:53 pm (спустя 3 часа 52 минуты; написано за 2 минуты 54 секунды)
   Post subject:
Reply with quote

Либо я что-то не понимаю, либо вам надо прочесть Как правильно задавать вопросы: статья, обязательная к прочтению (ln.com.ua/~openxs/articles/smart-questions-ru.html) .
Dim wrote:
Ведь не работает так, как на реальном сервере или под 98 - без искусственных задержек.
Как не работает? Даже если вставлять комментарии в каждую порцию данных?
Dim wrote:
Там я просто пишу print qq![промежуточный результат]! - и усё
Добавьте HTML-комментариев.
Dim wrote:
Там я просто пишу print qq![промежуточный результат]! - и усё : вижу очередной URL, код возврата, время, потраченное на парсинг и спеллчекинг (когда выставлена соотв. опция), если возврат 200.
Как правильно задавать вопросы: статья, обязательная к прочтению (ln.com.ua/~openxs/articles/smart-questions-ru.html)
Dim wrote:
Вообще-то, мне эта фича нужна не только для наглядности, но и для гарантии того, что скрипт в броузере раньше времени не заткнется, если время ожидания вывода будет превышено. Ведь проверка реальных ресурсов с сотнями или тысячами страниц занимает много времени.
Sleep для наглядности - чтобы была пауза между кусками данных. Чтобы можно было увидеть, что данные действительно передаются браузеру и он их отображает. Sleep вовсе не гарантирует, что данные будут отображены браузером по мере поступления. Попробуйте убрать $|=1 и посмотреть.

P.S. Maus! Ты где? )-:
Back to top
View user's profile Send private message Send e-mail
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Mon Nov 13, 2006 12:57 pm (спустя 13 часов 4 минуты; написано за 4 минуты 49 секунд)
   Post subject:
Reply with quote

Dim
с консоли все работает как ожидается. Лезем в Google по запросу Windows network packet size (www.google.com/search?hs=fny&hl=ru&client=opera&rls=ru&q=Windows+network+packet+size&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=) и находим вот это: www.winguides.com/registry/display.php/280/
Quote:
Maximum Transmission Unit (MTU) Size
Recommended Values
576 - Dial-up Connections
1492 - PPPoE Broadband Connections
1500 - Ethernet, DSL and Cable Broadband Connections
Эксперимент показывает, что размер буфера около 5кб в WinXP SP2. Если, конечно, я не наврал где-нить в изысканиях. Еще поиск выдает:
httpd.apache.org/docs/2.0/mod/mpm_common.html#sendbuffersize
httpd.apache.org/docs/1.3/mod/core.html#sendbuffersize
Плюс, как мне кажется, можно почитать , нет ли чего подходящего в HTTP-стандарте (может, можно каким-нибудь заголовком задать размер кусочка данных)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML