parserALT
Страницы форума: ← Назад | 1 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 600 | Дальше →

Можно ли вызвать парсеру самого себя?

#1Maxx
15.06.10 17:46 / 17:49
www.parser.ru → | ответить → | в избранное →

Можно ли вызвать парсеру самого себя?

Конструкция
$f[^file::exec[/../cgi-bin/parser3.exe]]

приводит к рекурсивному вызову и обработки того html из которого он вызывается. Откуда вызываемый парсер про этот файл знает. из переменной окружения? А поменять ее можно?

Передавать параметры пробовал, в $.stdin тоже, вызывать батник в котором вызывается парсер, предварительно сделав cd в документ-рут тоже пробовал, результат нулевой, рекурсия. Есть рецепт? ;)

P.S. Пока я так понимаю вариант один - делать file::load и туда передавать параметры, но это как то некошерно ;)
#2Sumo
→ Maxx [#1] | 15.06.10 18:38
www.parser.ru → | ответить → | в избранное →

Проблема известная - будет поправлена в 3.4.1.

#3Maxx
→ Sumo [#2] | 15.06.10 21:35
www.parser.ru → | ответить → | в избранное →

workaround-а нет никакого, пока не исправили?

#4MoKo
→ Maxx [#3] | 16.06.10 02:01
www.parser.ru → | ответить → | в избранное →

Обнулить переменные окружения

В промежуточном shell (.bat) скрипте. Вот эти (из parser3.C):

// were we started as CGI?
cgi=
getenv("SERVER_SOFTWARE") ||
getenv("SERVER_NAME") ||
getenv("GATEWAY_INTERFACE") ||
getenv("REQUEST_METHOD");

И кстати расскажите задачу - сами мы не смогли придумать, зачем нужно из парсера вызывать парсер - это ресурсоемко (запуск лишнего процесса). Почему нельзя вызвать напрямую парсерный код?
#5Maxx
→ MoKo [#4] | 17.06.10 20:17 / 20:19
www.parser.ru → | ответить → | в избранное →

Задача такая

Нужно обработать много XML-файлов (порядка 2000) и положить из них инфу в БД. Файлы большие, в среднем 15Mb.

Вот такой простой код (да, просто load, без обработки) достаточно быстро приводит к повешенью парсера

^tFileList.menu{
	$xDoc[^xdoc::load[$tFileList.name]
	^Erusage:compact[]
	^Erusage:print[]
}

Без compact это происходит гораздо быстрее. Вот кстати выдержка результата Erusage:print

2010-06-17 20:10:52	memory begin/end/collected: 448/111588/56 KB	calls/compacts: 1/1
2010-06-17 20:10:54	memory begin/end/collected: 448/210316/76 KB	calls/compacts: 2/2
2010-06-17 20:10:55	memory begin/end/collected: 448/308152/96 KB	calls/compacts: 3/3
2010-06-17 20:10:57	memory begin/end/collected: 448/405576/108 KB	calls/compacts: 4/4
2010-06-17 20:10:59	memory begin/end/collected: 448/503568/116 KB	calls/compacts: 5/5
2010-06-17 20:11:00	memory begin/end/collected: 448/517848/83484 KB	calls/compacts: 6/6
...
2010-06-17 20:11:33	memory begin/end/collected: 448/822576/1625420 KB	calls/compacts: 25/25
2010-06-17 20:11:35	memory begin/end/collected: 448/834724/1752948 KB	calls/compacts: 26/26
2010-06-17 20:11:37	memory begin/end/collected: 448/971844/1752956 KB	calls/compacts: 27/27



Решил вызывать парсера передавая ему по одному файлу.
#6Sumo
→ Maxx [#5] | 17.06.10 20:21
www.parser.ru → | ответить → | в избранное →

Сделать shell'скрипт, который последовательно вызывает скрипт на Парсере...

Парсер умеет принимать имя файла из командной строки. В конце-концов даже shell-скрипт можно сгенерировать самим Парсером.
#7Maxx
→ Sumo [#6] | 17.06.10 22:50
www.parser.ru → | ответить → | в избранное →
Ну там не все так просто, "управляющий" скрипт должен обойти директории, вложенные, распаковать по очереди архивы, из них отфильтровать xml-файлы и только потом каждый по очереди передать на обработку. Написать такой батничек(у меня винда) в принципе можно, но там такой феерический синтаксис :(

А на парсере все это написать - раз плюнуть
#8Sumo
→ Maxx [#7] | 17.06.10 23:02
www.parser.ru → | ответить → | в избранное →

Внешний скрипт на Питоне? :)

#9Misha v.3
→ Maxx [#1] | 22.07.10 08:25
www.parser.ru → | ответить → | в избранное →

исправлено в head

теперь при запуске внешнего скрипта парсер устанавливает переменную окружения PARSER_VERSION.

и если при своём запуске он обнаруживает, что эта переменная окружения установлена, то он запускается не как cgi, а просто как консольное приложение.
Страницы форума: ← Назад | 1 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 600 | Дальше →