我需要知道如何通过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
告诉我脚本中的第一行没有执行,允许访问。
任何建议都将不胜感激。
答案 0 :(得分:3)
我认为你在每个system()
命令中得到一个不同的shell。
一种简单的验证方法,以及一种更易于维护的方法,恕我直言,将所有命令放在一个(bash / zsh /无论)脚本中,并使用system()
运行
答案 1 :(得分: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
设置环境变量仅为该子进程设置它,下一次对系统的调用是具有全新环境的新子进程。
上面显示的解决方案在父进程中设置环境变量,因此将为所有子进程设置它。