学习Ruby,早期阶段。我有一个非常简单的脚本,我在终端上运行,我希望它根据用户输入在浏览器中打开文件。我可以使用什么代码(到目前为止我找到了对RoR的引用,没有帮助):
puts "What type of train would u like to see today? steam or diesel"
print "> "
train = $stdin.gets.chomp
if train == "steam"
我可以放什么代码,所以脚本在浏览器上打开xyz图像?
elsif train == "diesel"
我可以放什么代码,所以脚本在浏览器上打开xyz图像?
else "Sorry, I didn't understand that. Bye"
end
答案 0 :(得分:2)
您可能希望使用Selenium Webdriver之类的东西来启动和控制浏览器窗口。你需要安装selenium-webdriver gem,在这个例子中我使用Chrome(也需要chromedriver),所以你也需要安装它(你可以使用{{1}相反,如果你喜欢)。
试试这个:
:firefox
答案 1 :(得分:0)
从命令行打开Web浏览器的最简单方法是使用open command。如果给出一个看起来像URL的字符串(以http开头,有TLD等),open命令足够智能,可以启动当前的默认Web浏览器。
幸运的是,Ruby的内核模块(所有对象都继承)包含method以快速启动子shell,执行一些工作,然后将执行返回到ruby脚本。
我们可以用反引号完成此任务:
`open https://google.com`
或者使用%x语法,它允许我们定义自己的分隔符(个人而言,我更喜欢这种风格):
%x(open https://google.com)
上述代码应在默认浏览器中打开一个新的浏览器标签,并将其指向谷歌。作为旁注,我注意到如果你打开了多个浏览器窗口,那么打开新标签的窗口似乎是随意的,所以如果你没有看到浏览器弹出,请检查你的最小化窗口。
值得一提的是,当子shell中的shell命令写入stdout时,输出将作为字符串返回到脚本中。这很棒,因为我们可以做这样的事情:
files_in_home_directory = %x(cd && ls -a)
您也可以使用字符串插值!
song = "https://open.spotify.com/track/5ghIJDpPoe3CfHMGu71E6T"
%x(open #{song})
上面的方法是阻塞的,这意味着你的ruby脚本会停止并等待子shell完成其工作,然后再将控制权返回给你的脚本。这对于在浏览器中打开链接这样的小事情来说是完全没问题的,但是如果你需要在子shell中做一些慢点的事情,那你将度过一段美好的时光。 Process.spawn
让我们在另一个进程中打开一个子shell,然后忘掉它。要么它的工作完成了,要么它没有,但是我们的ruby脚本可以用于它的业务:
%x(sleep 10 && open https://google.com)
不仅会暂停子shell,还会暂停您的脚本
Process.spawn("sleep 10 && open https://google.com")
将允许您的脚本在子shell在另一个进程中完成其工作时继续。
与反引号/%x方法不同,Process.spawn不会将stdout作为字符串返回,而是返回进程ID。有many ways使用pid验证该过程的结果。
警告:您永远不应该执行包含用户输入值的字符串,这只是一个问题。