%x []を使用しているrubyスクリプト(Windows XPの場合)でantコマンドを呼び出します。私は作業ディレクトリを変更してantが正しいものになるようにする必要があります。そこで、2つのdosコマンドが呼び出されました。%x []は決して終了しません - antまたはsinatraまたはWindowsが原因ですか?
cmd = "cd #{$testing_root_directory.gsub("/","\\\\")} && ant -lib lib -f \"#{$testing_root_directory_builds.gsub("/","\\\\")}\\#{params['group']}\\#{params['run']}_build.xml\" 2>&1"
と変数CMDの内容が正確であるとoutput = %x[#{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
のように見えます。
これで、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}]
を置きます。私のantファイルには2つのターゲットがあります。最初のものが終了した(デフォルトのもの)ことを明確に確認できます。また、Ctrl + Cでルビスクリプトを終了すると、2番目のもの(アフタータフ)が開始しようとしていました。画面にはラベルが1つあります。
私は2番目のcmd変数の内容を使用している場合は、はルビーから作業し、それがうまく機能しDOSのコマンドラインから直接実行しないもの。だから、ルビーは文字列を正しく渡していないようです。 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"
私のスクリプトの動作をさせるために私のantターゲットを再編成することができますが、%x []が今終わらない理由を知りたいと思います。
- は、Apache Ant(TM)2010年12月20日にコンパイルされたバージョン1.8.2
- ルビー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:\EduTester\others\afterant.rb update_latest 10.0.0.50:4567 basics login 20110803111432"/>
</exec>
</target>
system()
からcmdを実行すると、antは、aftertaf
ターゲットで停止します。アフタータフがあります:ラベルとそれだけです。私はCTRL + Cを押すと
UPDATE 2
は、私はアリから来ると信じていTerminate batch job (Y/N)?
を聞か。私はexecの前にechoを追加し、execの前にエコーを追加しました。
UPDATE 3
私のRubyスクリプトを助けていない幹部にruby.exeへの完全なパスを使用して
はシナトラアプリケーションです。私はそれが重要であることを知らなかった。それは問題のように見えます。私が%X[]
より上に 'normal' rbファイルから呼び出すと、それは動作します。私がsinatraから呼び出すと、2番目のターゲットからexecが実行されません。 Antバッチファイルが何かを待っています。新しいターゲットからexecタグを削除すると、すべてうまく動作します。蟻が .batファイル.RBまたはコマンドラインまたはから実行された場合幹部はに動作することに注意してください。 sinatraから同じ.rbまたは.batを実行した場合execが動作しない。
FYI、 'exec'は絶対に返ってこないでしょう。現在のルビプロセスを実行されたプロセスに置き換えます。 'system'は子プロセスを実行し、子プロセスが完了すると再開します。 –