% x [] никогда не заканчивает - муравей, синатра или винда вызывают это? - PullRequest
0 голосов
/ 03 августа 2011

Я вызываю команду ant в своем скрипте ruby ​​(в Windows XP), используя% x [].Мне нужно изменить рабочий каталог, чтобы муравей запускался в правильном.Таким образом, есть две команды dos, которые называются.

cmd = "cd #{$testing_root_directory.gsub("/","\\\\")} && ant -lib lib -f \"#{$testing_root_directory_builds.gsub("/","\\\\")}\\#{params['group']}\\#{params['run']}_build.xml\" 2>&1"

, а содержимое переменной cmd выглядит так:

cd C:\Program Files\TestPro\TestPro Automation Framework\ && ant -lib l
ib -f "C:\Program Files\TestPro\TestPro Automation Framework\Output Files\builds
\basics\login_build.xml" 2>&1

Это правильно, и output = %x[#{cmd}] работает очень хорошо.


Теперь мне нужно было добавить новое имя цели при вызове ant.Поэтому я изменил код, чтобы учесть это.См. #{$target_name} в конце строки.

cmd = "cd #{$testing_root_directory.gsub("/","\\\\")} && ant -lib lib -f \"#{$testing_root_directory_builds.gsub("/","\\\\")}\\#{params['group']}\\#{params['run']}_build.xml\" #{$target_name} 2>&1"

, затем помещает cmd, дает мне правильный вывод

cd C:\Program Files\TestPro\TestPro Automation Framework\ && ant -lib l
ib -f "C:\Program Files\TestPro\TestPro Automation Framework\Output Files\builds
\basics\login_build.xml" aftertaf 2>&1

Но теперь output = %x[#{cmd}] никогда не заканчивается.В моем файле муравьев есть две цели.Я ясно вижу, что первый завершен (по умолчанию), и когда я завершаю свой сценарий ruby ​​с помощью сочетания клавиш CTRL + CI, я вижу, что второй (aftertaf) должен был начаться.На экране есть его метка.

Если я использую содержимое второй переменной cmd, то, что не работает из ruby ​​, и запускаю ее непосредственно из команды DOSлиния работает нормально .Так что мне кажется, что ruby ​​не проходит строку правильно.cmd.inspect дает мне "cd C:\\Program Files\\TestPro\\TestPro Automation Framework\\ && ant -lib lib - f \"C:\\Program Files\\TestPro\\TestPro Automation Framework\\Output Files\\buil ds\\basics\\login_build.xml\" aftertaf 2>&1"

Полагаю, я могу реорганизовать свои цели муравья, чтобы мой сценарий работал, но я хотел бы знать, почему% x [] никогда не заканчивается сейчас.


  • Apache Ant (TM) версия 1.8.2, скомпилированная 20 декабря 2010 года
  • ruby ​​1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
  • onWindows XP

ОБНОВЛЕНИЕ 1

Моя aftertaf цель выглядит как

<target name="aftertaf" depends="taf" description="after TAF ruby stuff">
  <exec executable="ruby.exe">
    <arg line="C:\EduTester\others\afterant.rb update_latest 10.0.0.50:4567 basics login 20110803111432"/>
  </exec>
</target>

При запуске cmd с system() запуск муравья останавливается на aftertaf цель.Существует метка aftertaf: и все.

ОБНОВЛЕНИЕ 2

Когда я нажимаю CTRL + CI, меня спрашивают Terminate batch job (Y/N)?, который, как мне кажется, исходит от муравья.Я добавил echo до и после exec в target aftertaf и echo перед выполнением exec.

Использование полного пути к ruby.exe в exec не помогло

UPDATE 3

Мой скрипт ruby ​​- это приложение sinatra.Я не знал, что это имеет значение.Похоже, имеет значение.Если я позвоню выше %X[] из 'нормального' файла rb, это будет работать.Если я вызываю его из Синатры, то выполнение второй цели не выполняется.Пакетный муравейный файл чего-то ждет.Если я удаляю тег exec из новой цели, все работает нормально.Обратите внимание, что exec работает , если ant запускается из .rb или командной строки или .bat файла.Если я запускаю тот же .rb или .bat из sinatra , exec не работает .

1 Ответ

1 голос
/ 03 августа 2011

Я просто догадываюсь здесь, потому что у меня нет машины Windows, доступной для тестирования в данный момент, но ваша команда застревает в ожидании какого-либо ввода?

Я заметил пару различий между проверкойи путы.В проверяемой версии:

  • Между параметром - - и 'f' перед параметром XML-файла есть пробел
  • Цель сборки отличается.В данном случае это 'aftertaf'.

Вы можете попробовать запустить команду, используя system вместо %x[].Таким образом, вместо того, чтобы быть захваченным, вывод муравья будет отправлен на стандартный вывод консоли, и вы сможете увидеть, что происходит.

...