%x[]永远不会结束-蚂蚁或sinatra或Windows导致它



我在ruby脚本中使用%x[]调用ant命令(在Windows XP上)。我需要更改工作目录,以便ant在正确的目录中启动。这里有两个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 FilesTestProTestPro Automation Framework && ant -lib l
ib -f "C:Program FilesTestProTestPro Automation FrameworkOutput Filesbuilds
basicslogin_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 FilesTestProTestPro Automation Framework && ant -lib l
ib -f "C:Program FilesTestProTestPro Automation FrameworkOutput Filesbuilds
basicslogin_build.xml" aftertaf 2>&1

但现在output = %x[#{cmd}]永远不会完成。在我的ant文件中有两个目标。我可以清楚地看到第一个完成了(默认的),当我通过CTRL + C退出我的ruby脚本时,我可以看到第二个(after)即将开始。屏幕上有它的标签。

如果我使用第二个cmd变量的内容,不能从ruby中工作,并直接从DOS命令行运行它,它可以正常工作。所以在我看来,ruby没有正确地传递字符串。cmd。检查给我"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"

我想我可以重新组织我的ant目标,使我的脚本工作,但我想知道为什么%x[]现在永远不会完成。


  • Apache Ant(TM) 1.8.2版本编译于2010年12月20日
  • ruby 1.8.7(2010-08-16补丁级别302)[i386-mingw32]
  • Windows XP
<标题>更新1

我的aftertaf目标看起来像

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

当从system()运行cmd时,ant运行停止在aftertaf目标。有一个aftertaf:标签,就是这样。

<标题>更新2 h1> 我按CTRL+C时,我被问到Terminate batch job (Y/N)?,我相信它来自蚂蚁。我在target afteraff中执行exec之前和之后添加了echo,执行exec之前添加了echo。

在exec中使用ruby.exe的全路径没有帮助

<标题> 3 更新我的ruby脚本是一个sinatra应用程序。我不知道这有什么关系。看起来很重要。如果我从"正常"rb文件调用上面的%X[],它就会起作用。如果我从sinatra调用它,则不会执行第二个目标的执行。Ant批处理文件正在等待某些东西。如果我从新目标中删除exec标签,一切都可以正常工作。注意,如果ant是从运行的,执行程序将在中工作。rb 命令行。bat 文件。如果我从sinatra运行相同的。rb或。bat exec不工作

我只是猜测这里,因为我没有一个Windows机器可用的测试,但你的命令卡住等待一些输入?

我注意到inspect和put之间的一些差异。在inspect版本中:

  • xml文件参数
  • 前的'-'和'f'之间有一个空格
  • 构建目标不同。

您可以尝试使用system而不是%x[]来运行命令。这样,ant的输出将被发送到控制台上的stdout,而不是被捕获,您可以看到发生了什么。

相关内容

  • 没有找到相关文章