
はじめまして
Rubyをはじめて1か月の初心者です。
popen3を使用するにあたって大変困っております。
popen3で外部コマンドを実行して、実行結果の標準出力をファイルとして格納しようと思っています。
外部コマンドの内容は、SSH接続でサーバへログインし、そこにあるシェルスクリプトを実行させるもので、
呼び出すシェルスクリプトに対して、Rubyから標準入力を渡し、シェルスクリプトが標準入力を受け取り、
それをもとに呼び出したシェルスクリプトがさらに別のシェルスクリプトを呼び出し、実行結果を標準出力としてRubyで受け取ってファイルに格納したいと思っています。
ソースとしては、以下のようにしてますが、標準入力を引き渡す方法が分かりません。
その為、標準入力を引き渡す部分は記述していません。
Open3.popen3('ssh localhost sh test.sh ') do |stdin, stdout, stderr|
begin
loop do
IO.select([stdout,stderr]).flatten.compact.each { |io|
if stdout != "" then
stdout_lines = stdout
puts("stdout_lines = " + stdout_lines)
end
stderr_lines = stderr if stderr != ""
puts("stderr_lines = " + stderr_lines)
}
break if $stdout.classed? && $stderr.closed?
end
rescue EOFError
end
end
JRubyの1.6.8なので、Rubyのバージョンは1.8.7相当です。
なにぶん初心者の為、なにをどうすれば良いか分からない状態です。
まず、実現が可能かを知りたいです。
実現可能であれば、標準入力を引き渡す方法を教えていただきたく。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
shellからの出力を、Rubyで入力として受けとってますよね?
shellの入力に渡すには、その逆で、Rubyから出力してやればいいのです。
シェルから続けて別なコマンドに渡すには
方法1) パイプライン込みのコマンドラインを popen3の引数として指定する
Open3.popen3('sh test.sh | sh test2.sh')
方法2) Rubyでパイプラインの代りをする
Open3.popen3('sh test.sh') #A
Open3.popen3('sh test2.sh') #B
Aの出力をRubyで入力し、Bの入力へとRUbyから出力する。
この回答への補足
test.shに対して、標準入力を引き渡す方法が分かりました。
以下のように、Open3.popen3のdoの最初にstdinに対してデータをWriteしてあげれば、
シェルの方で、『cat -』 をすれば標準入力が取得できました。
説明が下手でちゃんと伝えられませんで、すみません。
色々読み取っていただきありがとうございます。
Open3.popen3('ssh localhost sh test.sh ') do |stdin, stdout, stderr|
stdin.write(data1)
#標準入力のクローズ
stdin.close
begin
loop do
IO.select([stdout,stderr]).flatten.compact.each { |io|
if stdout != "" then
stdout_lines = stdout
puts("stdout_lines = " + stdout_lines)
end
stderr_lines = stderr if stderr != ""
puts("stderr_lines = " + stderr_lines)
}
break if $stdout.classed? && $stderr.closed?
end
rescue EOFError
end
end
No.1
- 回答日時:
この回答への補足
ここのマニュアルは読んでます。
SSHでの接続で、シェルスクリプトを実行するところまでは出来ていて、
実行するシェルスクリプトがRubyからの標準入力を受け取る方法が分かれば解決なのかと思っています。
どうも、根本的にシェルが分かってないので、
なんともかんともって感じです。
厳しい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ruby OpenURI::Meta
-
Ruby require ライブラリー
-
Accessで文字列のバイト数読み込み
-
【メモリ不足で落ちる(python)】
-
1、Rstudioで回帰直線を求める...
-
VBScriptでExcel(2019)上のデー...
-
クリスタルレポートで困ってい...
-
パイソンプログラム
-
7セグメント LED ディスプレイ ...
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
rubyは処理が遅い??
-
Rubyのpopen3について
-
小文字wと大文字Wの区別
-
ruby on railsインストールでエ...
-
プログラミング言語で大文字と...
-
COBOLのIFの入れ子について
-
VB.NETで階乗を求めるプログラ...
-
web上のhtmlファイルから文字デ...
-
画像をページ右側に並べる方法...
-
Xcodeでランダム整数
-
RubyでNo such file or directo...
-
Pro*CとCの間|変数の有効範囲
-
プログラミング講師はまだ需要...
-
rubyプログラムからrubyプログ...
-
ruby の File.exist? メソッド...
-
たびたびすいません。VBAです。
-
Ruby / passenger のインストー...
-
GoTo文について
-
Ruby
-
Ruby interpreter (CUI) 2.2.3 ...
おすすめ情報