我在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
我的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:标签,就是这样。
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,而不是被捕获,您可以看到发生了什么。