
はじめまして
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(ゲーム) SkyrimSEのMod organizer で困っています。誰か助けてください。 1 2022/12/05 01:49
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- その他(プログラミング・Web制作) Linuxについて質問です。 引数に指定されたアクセスログのファイルからアクセス数が多い順に上位3つ 1 2023/02/03 03:46
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
(再質問)エクセルのマクロボ...
-
Ruby require ライブラリー
-
ruby loopメソッド 変数
-
実行時エラー450:引数の数が一...
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
C言語の入力した文字を反転させ...
-
ruby 配列
-
教えてください
-
pythonエラー
-
Rubyで掲示板は作れますか
-
電子書籍epub変換について
-
Accessで文字列のバイト数読み込み
-
ruby:selfについて
-
ruby クラス・オブジェクト・イ...
-
ruby begin句
-
power BI クエリエディター 〇...
-
英数字を含む文字列(0-9,A-Z)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Rubyでの比較 (Float)
-
delete("\\",")
-
Loop で文字を回すやり方
-
Rubyから外部プログラムを実行...
-
Ruby での日付のあらわし方につ...
-
rubyの文法について質問です。
-
rubyの構文(&&を用いた条件分...
-
プログラミング Ruby について
-
初歩でめんどくさい質問
-
エラー
-
Rubyのpopen3について
-
rubyのプログラムについて
-
小文字wと大文字Wの区別
-
COBOLのIFの入れ子について
-
Ruby interpreter (CUI) 2.2.3 ...
-
web上のhtmlファイルから文字デ...
-
RubyでNo such file or directo...
-
バーコードのチェックデジット...
-
VB.NETの入門書、どれをお使い...
-
We're sorry, but something we...
おすすめ情報