.bat + perl

Все темы, касающиеся администрирования и работы с Windows/Windows Server.

Модератор: Sebas

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

.bat + perl

Сообщение Oxygen » 18.06.2012 (Пн) 14:12

Приветствую. Возникла такая проблема, есть некий bat-ник (нужен для привинчиванию скриптовых тестов на SoapUI к TeamCity), для распарсивания вывода, и изменения точки сервисов использую перл, есть необходимость передать параметр, с которым запускается батник, в перл скрипт.
Вот сам батник:
Код: Выделить всё
C:\Perl64\bin\perl5.14.2.exe -e -n "if(tr/ws\.openglass\.ru|w1\.openglass\.ru|w2\.openglass\.ru|v-stg-app11/тут_должен_быть параметр/){}" C:\soapui\projects\my_project.xml
cd C:\PROGRA~2\SMARTB~1\SOAPUI~1.0\bin
cmd.exe /C testrunner.bat -sNew_tests -cTest1 -a -fC:\soapui\Logs C:\soapui\projects\my_project.xml  2>&1 | C:\Perl64\bin\perl5.14.2.exe -e "$res=0; while (<>) {print STDOUT; if(/FAILED/){$res=$res+1};} if($res==0){print \"0\"; exit 0;} else {print \"1\"; exit 1};" >> c:\TEMP\logfile.txt
goto answer%ERRORLEVEL%
:answer0
echo 0
exit /B 0
:answer1
echo 1
exit /B 1

Я не очень уверена в работоспособности первого регекспа, т.к. писала его на коленке, и ещё не проверяла. В общем, запускаться батник будет так:
script.bat v-stg-app11 (v-stg-app11 в этом случае, это имя сервера, оно может быть любым, в том числе, и содержать неэкранированные точки, слеши, и всё что угодно)
Его нужно передать вот сюда :
C:\Perl64\bin\perl5.14.2.exe -e -n "if(tr/ws\.openglass\.ru|w1\.openglass\.ru|w2\.openglass\.ru|v-stg-app11/тут_должен_быть параметр/){}" C:\soapui\projects \my_project.xml

Если написать что-то вроде
C:\Perl64\bin\perl5.14.2.exe -e -n "if(tr/ws\.openglass\.ru|w1\.openglass\.ru|w2\.openglass\.ru|v-stg-app11/'%1'/){}" C:\soapui\projects \my_project.xml
то перл кушать этот скрипт отказывается. Я пробовала эксперементировать с разными кавычками, и у меня ничего не вышло. Вторая проблема это экраны, предусмотреть их заранее невозможно, и соотвественно, придется экранировать где-то уже внутри батника.

Как вариант сделать жесткую выборку по имени сервера, но опять же мне этот варинат не очень нравится, т.к. позже планирую переписать регекспу на поиск и замену того, что привязано к определенным тегам, а не на поиск по имени сервера.

Вариант переписать скрипт на power shell, но я им увы не владею, пыталась смотреть доки, но как-то там всё мудрено с потоками и их перенаправлением - быстро разобраться мне не удалось.

Буду признательна за любую помощь.
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: .bat + perl

Сообщение Alec » 18.06.2012 (Пн) 14:48

А нужны ли там кавычки или апострофы?
Попробуй, для начала, вместо вызова перла просто вывести на экран строку с параметром:
Код: Выделить всё
echo "if(tr/ws\.openglass\.ru|w1\.openglass\.ru|w2\.openglass\.ru|v-stg-app11/%1){}" C:\soapui\projects\my_project.xml

и посмотреть, а та ли строка выводится, которая нужна.
Иногда лучше вовремя остановиться...
И начать заново!

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Re: .bat + perl

Сообщение Oxygen » 18.06.2012 (Пн) 16:44

Действительно не нужны, спасибо. Перл в качестве sed-а таки заработал. Но теперь проблема в том, что у tr похоже проблемы с utf8, и он мне зачем-то заменяет все s на 2 и все t на u. Такое его поведение кажется крайне престранным. Сейчас использую так:

Код: Выделить всё
C:\Perl64\bin\perl5.14.2.exe -pe "use utf8; tr/ws\.openglass\.ru|w1\.openglass\.ru|w2\.openglass\.ru|v\-stg\-app11/%1/" C:\soapui\projects\my_project1.xml  > C:\soapui\projects\my_project2.xml


В итоге, получаю вот такой вот ужас в xml-е (маленький кусочик)

Код: Выделить всё
</con:2euuing></con:2euuing2><con:inuerface x2i:uype="con:W2dlInuerface" w2aVer2ion="NONE" name="Ba2icHuupBinding_ISecuredPla2maSeruice" uype="w2dl" bindingName="{huup://uempuri.org/}Ba2icHuupBinding_ISecuredPla2maSeruice" 2oapVer2ion="u_u" anonymou2="opuional" definiuion="huup://w2.opengla22.ru/Pla2maBridge/SecuredPla2maSeruice.2uc?WSDL" xmln2:x2i="huup://www.w3.org/u00u/XMLSchemauin2uance"><con:2euuing2/><con:definiuionCache uype="TEXT" roouParu="huup://w2.opengla22.ru/Pla2maBridge/SecuredPla2maSeruice.2uc?WSDL"><con:paru><con:url>huup://w2.opengla22.ru/Pla2maBridge/SecuredPla2maSeruice.2uc?WSDL</con:url><con:conuenu>


Может кто сталкивался как это лечить? Я попыталась добавить use utf8 но не помогло.
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: .bat + perl

Сообщение Хакер » 18.06.2012 (Пн) 17:33

Привет, Oxygen :)

Oxygen писал(а):Но теперь проблема в том, что у tr похоже проблемы с utf8

Какие могут бы проблемы с UTF8, если UTF8 буквально побитно ничем не отличается от ANSI, если содержит только латиницу и спец. символы.

По-моему дело совсем в другом. Вообще, ты Perl используешь исключительно ради текстозамены по регулярному выражению? Важны именно PCRE или примитивные виндовые регэкспы тоже пойдут?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: .bat + perl

Сообщение alibek » 19.06.2012 (Вт) 8:29

1. В какой кодировке хранится сам Perl-скрипт?
2. В какой кодировке запущена командная оболочка? Обычно это OEM, в реестре этот параметр может быть изменен на UTF8.
3. Какие кодировки на всех входах (аргументы, базы данных, внешние файлы)?
4. Какие кодировки на выходе?

И зачем вообще нужен bat-файл? Почему бы не вызывать сразу Perl с нужным скриптом и аргументом?
И от use utf8 я бы отказался, лучше самому перекодировать.
Lasciate ogni speranza, voi ch'entrate.

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Re: .bat + perl

Сообщение Oxygen » 19.06.2012 (Вт) 12:11

Разобралась :) Проблема была именно в регекспе. А точнее в том, что я пыталась использовать tr (transtation) а нужно было s (substitution). И то и то делает замену, но первый вариант делает побуквенную замену, а второй именно подстановку. Из-за этого регекспа криво работала.

По поводу батника - он нужен для того чтобы без лишних файлов программ на перле и прочего, подцепить скрипт на soapui к TeamCity для постдеплойного heartbeat тестирования сервисов. Скрипт в котором замены это не перл скрипт, а xml SoapUi проекта. :)
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов


Вернуться в Windows (администрирование)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList