2017-11-28 7 views
1

に格納されている:カールコマンドは、印刷の代わりに、私はこの単純なRubyスクリプトを実行すると、Rubyの

a = `curl localhost` 
puts "Result is: #{a}" 


=> % Total % Received % Xferd Average Speed Time Time  Time CurrentDload Upload Total Spent Left Speed 
=> 0  0 0  0 0  0  0  0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to localhost port 80: Connection refused 
=> Result is: 

は、コマンドが実行されたときに結果が印刷されていることを参照してください、と変数が空です。

a = `ls` 
puts "Result is: #{a}" 

=> Result is: test.rb 

がどのように変数に最初のカールコマンドの結果を保存することができます:私は、同じ形式で他のコマンドを実行した場合しかし、それは私が期待するように動作しますか? man curlから

答えて

1

カールは、通常の操作中に進行状況メーターを表示し、このデータは デフォルトで端末に表示されている...あなたはHTTP POSTの進行状況 メーターをしたいか、要求をPUTする場合は、シェルのリダイレクト(>)、-o、--outputなどを使用して、応答を の出力をファイルにリダイレクトする必要があります。

バッククォートを使用すると、コマンドの標準出力(stdout)のみが得られるということが起こります。

カール出力が必要な場合は、-oオプションを使用できます。これは出力を含むファイルを作成し、必要に応じて使用できます。

`curl localhost -o curl_localhost_output.txt` 
puts File.read('path-to-file/curl_localhost_output.txt') 

はまた、「道」stdoutに標準エラー出力をリダイレクトするために存在しますが、あなたが作成して読まなく、curl localhost 2>&1を使用して、カールの出力を保存することができるように、stdoutになく、1という名前のファイルにではありませんファイル。

+0

ありがとうございます。あなたが提供した情報に基づいて、 '' a = 'curl localhost 2>&1'''をテストしました。これは、ファイルから読み込むことなく期待通りに動作します。これをあなたの答えに加えることができますので、私はそれを受け入れることができます – Scotty

+0

更新されました。私はそれを感謝しました。 –

+0

'curl -s localhost'はプログレスメーターを無音にし、stdoutの応答本体をうまく与えます。リダイレクトの必要はありません。また、 'open-uri'を要求します。 a = open( 'http:// localhost'){| f | f.read} 'は純粋なRubyに相当します。 – Amadan

関連する問題