2017-06-18 5 views
2

Rubyの初期段階を学ぶ。私はターミナルで実行する非常に単純なスクリプトを持っており、ユーザーの入力に基づいてブラウザでファイルを開くようにしたい。どのようなコードを私は(私がこれまでのRoRへの参照を発見した、助けにはならなかった)を使用することができます:Rubyでブラウザーで画像を開く

puts "What type of train would u like to see today? steam or diesel" 
print "> " 
train = $stdin.gets.chomp 
if train == "steam" 

私は置くことができますスクリプトは、ブラウザ上でのxyz画像を開き、どのようなコード?私は置くことができますスクリプトは、ブラウザ上でのxyz画像を開き、どのようなコード

elsif train == "diesel" 

else "Sorry, I didn't understand that. Bye" 

end 

答えて

1

おそらく、ブラウザウィンドウを起動し、制御するためのセレンwebdriverをのようなものを使用したいと思うでしょう。 selenium-webdriverの宝石をインストールする必要があります。この例ではクロムを使用しています(クロムドライブも必要です)。その場合も同様にインストールしておく必要があります(必要に応じて:firefoxを使用できます) 。

はこれを試してみてください:

require 'selenium-webdriver' 

driver = Selenium::WebDriver.for :chrome 
puts "What type of train would u like to see today? steam or diesel" 

train = gets.chomp 

if train == "steam" 
    driver.get 'https://en.wikipedia.org/wiki/Steam_locomotive' 
elsif train == "diesel" 
    driver.get 'https://en.wikipedia.org/wiki/Diesel_locomotive' 
else "Sorry, I didn't understand that. Bye" 
end 
0

オープン

コマンドラインからWebブラウザを開きする最も簡単な方法は、open commandを使用することです。 URLのように見える文字列(httpで始まり、TLDを持つなど)が与えられた場合、openコマンドは現在のデフォルトのWebブラウザを起動するほどスマートです。幸いにも

バッククォートと%X

、(すべてのオブジェクトが継承)Rubyのカーネルモジュールはすぐに、サブシェルを起動し、いくつかの作業を実行して、あなたのRubyスクリプトに実行を戻すためmethodが含まれています。

我々はバッククォートでこれを達成することができ、次のいずれか`open https://google.com`

かと

% X構文、私たちは私たち自身の区切り文字を定義することができますされ(個人的に、私はこのスタイルを好む):

%x(open https://google.com)

上記のコードは、デフォルトのブラウザに新しいブラウザタブを開き、Googleにポイントする必要があります。参考にして、複数のブラウザウィンドウが開いている場合、新しいタブが開いているウィンドウが任意であるように見えるので、ブラウザのポップアップが表示されない場合は、最小化されたウィンドウを確認してください。

サブシェル内のシェルコマンドがstdoutに書き込むと、代わりに出力が文字列としてスクリプトに返されることに言及することは重要です。

files_in_home_directory = %x(cd && ls -a)

ます。また、文字列の補間を使用することができます。私たちはこのようなものを行うことができますので、これは素晴らしいです!

song = "https://open.spotify.com/track/5ghIJDpPoe3CfHMGu71E6T" 
%x(open #{song}) 

プロセス。スポーン

上記の方法はブロックされています。これは、Rubyスクリプトが停止してスクリプトに制御を戻す前に、サブシェルが処理を完了するのを待つことを意味します。これは、ブラウザでリンクを開くなどの小さなことを行うのはまったく問題ありませんが、そのサブシェルで何か遅くする必要がある場合は、悪い時間がかかるでしょう。 Process.spawnは、別のプロセスでサブシェルを開き、それを忘れることができます。その作業は行われますか、それはしていませんが、私たちのRubyスクリプトは、その事業に取り掛かることができ、次のいずれか

%x(sleep 10 && open https://google.com)はサブシェルだけでなく、スクリプト

Process.spawn("sleep 10 && open https://google.com")だけでなく、あなたのスクリプトがサブシェルながら継続することができます一時停止します別のプロセスでその仕事をしています。

Backticks /%xメソッドとは異なり、Process.spawnはstdoutを文字列として返さず、代わりにプロセスIDを返します。 pidを使用してそのプロセスの結果を確認するには、many waysがあります。

警告:ユーザーが入力した値を含む文字列は決して実行しないでください。これは単に問題を求めているだけです。

関連する問題