2011-08-03 2 views
0

%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ターゲットは

ように見えるUPDATE
<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が動作しない

+2

FYI、 'exec'は絶対に返ってこないでしょう。現在のルビプロセスを実行されたプロセスに置き換えます。 'system'は子プロセスを実行し、子プロセスが完了すると再開します。 –

答えて

1

現時点でテストできるWindowsマシンがないので、私はちょうどここで推測していますが、コマンドが入力を待っているのですか?

私は検査とputsの間に2つの違いがあることに気付きました。検査のバージョンでは:「 - 」と「F」のビルドターゲットが異なる

  • xmlファイルパラメータの前に

    • の間にスペースがあります。この場合、「アフタータフ」です。

    の代わりに%x[]を使用してコマンドを実行できます。そうすれば、antの出力はコンソールにstdoutに送られ、何が起きているのかを見ることができます。

  • +0

    私の質問が更新されました。ビルドターゲットは「アフタータフ」、私の間違いでなければなりません。 fの後に指定されたビルドファイルが読み込まれて実行が開始されたため、余分なスペースが問題になるとは思わない。 – Radek

    +0

    Rubyからantを実行しているときに、私の 'aftertaf'ターゲットでruby.exeファイルへのフルパスを指定する必要があります.... – Radek

    +0

    アフタータフが待っている間にコンソールでCtrl-Dを押すとどうなりますか? (rubyがコマンドライン引数なしで実行されている場合は、stdinでスクリプトを入力するのを待っています(Ctrl-Dで終了します)。 –

    関連する問題