1

別のアプリケーションを実行するために、Ruby 経由で端末コマンドを送信する方法を知る必要があります。Watir スクリプト内の特定のポイントで SIKULI スクリプトを呼び出して、Watir では実行できないいくつかのステップを処理したいと考えています。

どうすればいいのかわかりません。ここ Stack Overflow でいくつかの記事を読みましたが、うまくいきません。

手動で実行する手順は次のとおりです。

jfleck-mbp:~ joe.fleck$ SIKULI_HOME=/Applications/Sikuli-IDE.app/Contents/Resources/Java
jfleck-mbp:~ joe.fleck$ java -jar $SIKULI_HOME/sikuli-script.jar '/Users/joe.fleck/Desktop/Save_File_Button.sikuli'

これらは、実行しようとしている Ruby ファイルにあります。

require 'rubygems'
system('SIKULI_HOME=/Applications/Sikuli-IDE.app/Contents/Resources/Java')
system ("java -jar $SIKULI_HOME/sikuli-script.jar '/Users/joe.fleck/Desktop/Save_File_Button.sikuli'")

私が得る出力は次のとおりです。

Unable to access jarfile /sikuli-script.jar

これは、アクセスを許可するスクリプトの最初の行が実行されなかったことを示しています。

任意の提案をいただければ幸いです。

4

2 に答える 2

3

コマンドごとに異なるシェルを取得していると思います。system()

確認する簡単な方法の 1 つで、より保守しやすいアプローチである IMHO は、すべてのコマンドを単一の (bash/zsh/whatever) スクリプトに入れsystem().

于 2012-11-01T13:48:24.743 に答える
1

次のように修正します。

ENV['SIKULI_HOME'] = '/Applications/Sikuli-IDE.app/Contents/Resources/Java'
system ("java -jar $SIKULI_HOME/sikuli-script.jar '/Users/joe.fleck/Desktop/Save_File_Button.sikuli'")

問題は、 をsystem呼び出すときに、子プロセスを呼び出していることです。子プロセスは、親プロセス (この場合は Ruby スクリプト) から環境を継承します。system環境変数を設定するために使用すると、その子プロセスに対してのみ設定されます。システムへの次の呼び出しは、新しい環境を持つ新しい子プロセスです。

上記のソリューションは、親プロセスに環境変数を設定するため、すべての子プロセスに設定されます。

于 2012-11-01T13:53:12.780 に答える