Ruby初心者です。
Rubyから違うファイルを実行する場合について教えてください。
例えば、test.batに
echo off
echo.
SET /p INPUT="Input string =>"
echo %INPUT%
pause
のように記述されており
これをRubyから実行し、
入力もRubyからするにはどうしたら良いでしょうか?
つまり、Rubyからtest.batを実行し、自動で入力も行いたいです。
echoの内容もコマンドプロンプトから確認したいです。
また、RubyからBuildコマンドを実行したいと思います。
Buildは別プロセスで動いている状態になっていると思いますが、
Build中はRubyはどのような状態になるでしょうか?
RubyからBuildした場合、Build動作が重くなることを懸念しています
有識者の方、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
test.batに文字を渡すだけなら
IO.popen("test.bat", "w") do |out|
out.puts "foobarbaz"
end
test.batの出力をRubyスクリプトで受け取るなら、こんな感じでどうでしょう。
require 'open3'
Open3.popen3("test.bat") do |stdin, stdout, stderr|
stderr.close
stdin.puts "foobarbaz"
stdin.close
while line = stdout.gets
puts "ruby : " + line
end
end
う~ん、pauseで停止しませんね。
> Buildは別プロセスで動いている状態になっていると思いますが、
> Build中はRubyはどのような状態になるでしょうか?
よくわかりませんが、Buildのプロセスの終了待ちではないでしょうか。
早速の回答ありがとうございます。
上記実行してみましたが、
windows環境なので、open3が使用できませんでした。。。。
> う~ん、pauseで停止しませんね。
pauseで停止しなくても大丈夫です。
test.batを起動後、またrubyで別の処理を続けたいので。。
No.3
- 回答日時:
No.1です。
私もWindows環境で使用しているので、そんなはずは……と思ったのですが
たしかに ActiveScriptRuby 1.8.7(p299)ではpopen3はエラーになりますね。
私が動作確認したのは以下です。
Ruby-1.9.1-p429 (RI抜き) Microsoft Installter Package(2010/07/021 version 28523)
(http://www.artonx.org/data/asr/)
# 先の回答にも書きましたが、test.batに文字を渡すだけならIO.popenで良いと思います。
一応、情報として追記させて頂きました。
No.2
- 回答日時:
別解。
1)
SET /P で入力するのではなく、コマンドライン引数にして %1,%2...で参照する
2)
test.bat の内容をRubyに移植する。
> RubyからBuildコマンドを実行したい
その起動方法と処理次第でしょう。
exec()だと実行するコマンドに移行する形になるので、Runy自体が無くなります。
system()は呼び出したプロセスの終了を待つので、Ruby自体の処理はほとんどありません。
バッククオートも待ちますが、出力を文字列に蓄えるので、出力が大量だと影響があるかもしれません。
popen等だと、Ruby側の入出力処理(gets,puts等)が遅いと、ビルド側が待たされるかもしれません。
spawnで実行して、終了を待ち時間無しのループで確認するような作りにすると、このループが負荷になるかもしれません。
別回答ありがとうございます!!
> 1)
> SET /P で入力するのではなく、コマンドライン引数にして %1,%2...で参照する
> 2)
> test.bat の内容をRubyに移植する。
test.batの変更はせずに行いたいんですよね。。。
標準入力に対して自動的に入力できたら便利だなぁとおもって。
> exec()だと実行するコマンドに移行する形になるので、Runy自体が無くなります。
Build実行後、続けてのrubyの処理はできなくなるということでしょうか?
Build実行後、続けて処理するならば、
> system()は呼び出したプロセスの終了を待つので、Ruby自体の処理はほとんどありません。
がBuild時の余計な負荷は少なく、処理も続けてできそうでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby Ruby / passenger のインストールについて 1 2023/01/30 18:31
- Ruby MacBookAir起動時にRubyソースコードをコマンドラインで実行するには? MacのOS起動時 1 2022/04/18 01:55
- Ruby Ruby on Railsでサーバーを立ち上げるには 1 2022/08/28 16:16
- Mac OS MacOSのLaunchAgentsってなんですか?使い方など教えてください。 前の質問でLaunc 1 2022/04/24 02:06
- Ruby Gitのクローンについて 3 2022/04/10 12:28
- Ruby プログラミング講師はまだ需要ありますでしょうか? 1 2022/11/07 19:43
- その他(IT・Webサービス) 今、プログラミングスクールの『Tec⚫︎cademy」のRuby on railsを受講しているので 1 2023/05/10 22:10
- オープンソース コマンドプロンプトのコードの実行方法を教えて欲しい 2 2022/11/26 20:45
- Ruby ruby 1 2022/06/10 13:31
- UNIX・Linux Fedoraのupgradeで、libruby.so.3.0()がinstallできないという 1 2023/03/30 16:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Word・Excelの「Ctrl+Y」につい...
-
VB.NETで他のEXEを実行させる
-
if文の条件に関数が入ってる場...
-
C#で他のPCのサービスの起動...
-
Ruby初心者です。
-
onedriveで同期解除をしたら、...
-
vlan internal allocation poli...
-
teratarmでコマンド入力すると...
-
WindowsからSSHでサーバーにあ...
-
マイドキュメントのフォルダの...
-
Edgeでダウンロード状況表示画...
-
沢山のフォルダにあるファイル...
-
TXTファイルを上書き保存する前...
-
Excel VBAでほかのアプリケーシ...
-
共有しているファイルを削除し...
-
YAHAMA RTXシリーズのコマンド...
-
expectでコマンド実行結果を変...
-
パワーポイントのデータを誤っ...
-
ファイルを閉じるコマンドを教...
-
ISOファイルが削除できません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if文の条件に関数が入ってる場...
-
VB.NETで他のEXEを実行させる
-
C#で他のPCのサービスの起動...
-
再質問 コンボボックス リス...
-
ファイル名の日付について教え...
-
プログラミング for文
-
python スクリプトファイルの実行
-
シェルスクリプトに引数を渡す...
-
Schemeで複数の関数を連続で実...
-
Audioサービスが実行されていま...
-
while文とif文
-
テスト環境でのsaveについて
-
C++ arduinoのスケッチについて...
-
Word・Excelの「Ctrl+Y」につい...
-
C言語,if文の条件式について
-
テキストボックスからコンボボ...
-
パイソン グローバル変数について
-
onedriveで同期解除をしたら、...
-
vlan internal allocation poli...
-
YAHAMA RTXシリーズのコマンド...
おすすめ情報