Ruby初心者のための他のファイルの実行方法とBuildコマンドについて

このQ&Aのポイント
  • Ruby初心者の方に、Rubyから他のファイルを実行する方法と自動で入力を行う方法について教えてください。
  • また、RubyからBuildコマンドを実行する時のRubyの状態についても教えてください。Build中はRubyが重くなる可能性があるので心配です。
  • 皆様のアドバイスをお待ちしています。
回答を見る
  • ベストアンサー

Ruby初心者です。

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動作が重くなることを懸念しています 有識者の方、よろしくお願いします。

  • Ruby
  • 回答数3
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • siffon9
  • ベストアンサー率64% (136/211)
回答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のプロセスの終了待ちではないでしょうか。

catsuya
質問者

お礼

早速の回答ありがとうございます。 上記実行してみましたが、 windows環境なので、open3が使用できませんでした。。。。 > う~ん、pauseで停止しませんね。 pauseで停止しなくても大丈夫です。 test.batを起動後、またrubyで別の処理を続けたいので。。

その他の回答 (2)

  • siffon9
  • ベストアンサー率64% (136/211)
回答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で良いと思います。 一応、情報として追記させて頂きました。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

別解。 1) SET /P で入力するのではなく、コマンドライン引数にして %1,%2...で参照する 2) test.bat の内容をRubyに移植する。 > RubyからBuildコマンドを実行したい その起動方法と処理次第でしょう。 exec()だと実行するコマンドに移行する形になるので、Runy自体が無くなります。 system()は呼び出したプロセスの終了を待つので、Ruby自体の処理はほとんどありません。 バッククオートも待ちますが、出力を文字列に蓄えるので、出力が大量だと影響があるかもしれません。 popen等だと、Ruby側の入出力処理(gets,puts等)が遅いと、ビルド側が待たされるかもしれません。 spawnで実行して、終了を待ち時間無しのループで確認するような作りにすると、このループが負荷になるかもしれません。

catsuya
質問者

お礼

別回答ありがとうございます!! > 1) > SET /P で入力するのではなく、コマンドライン引数にして %1,%2...で参照する > 2) > test.bat の内容をRubyに移植する。 test.batの変更はせずに行いたいんですよね。。。 標準入力に対して自動的に入力できたら便利だなぁとおもって。 > exec()だと実行するコマンドに移行する形になるので、Runy自体が無くなります。 Build実行後、続けてのrubyの処理はできなくなるということでしょうか? Build実行後、続けて処理するならば、 > system()は呼び出したプロセスの終了を待つので、Ruby自体の処理はほとんどありません。 がBuild時の余計な負荷は少なく、処理も続けてできそうでしょうか?

関連するQ&A

  • 2つ目の「pause」は無効?

    DOSコマンドの「pause」について質問です。 -- test1.bat pause echo ああああ pause -- このようなバッチファイルを実行したときに 2つ目のpauseでは処理ストップしないようです。 # 3つ目を追加すると同様の動作をするようです。 # -- test2.bat # pause # echo ああああ # pause > NUL # pause # -- これってpauseコマンドのバグでしょうか?

  • コマンドプロンプトからのcmd実行について

    現在VBSでオブジェクトを定義しrunを使いcmd経由で他のバッチ・VBS・ソフトの起動をやっています。 ふととあるパスが実行できませんでした。 そこで別途個別にコマンドプロンプトだけで実行してみましたがやはりうまく処理できません。 [echo.bat] echo test pause [コマンドプロンプト] rem その1 cmd /K c:\temp\a\echo.bat rem その2 cmd /K C:\Temp\(a\echo.bat その1の結果 C:>cmd /K C:\Temp\a\echo.bat C:>echo test test C:>pause 続行するには何かキーを押してください . . . その2の結果 C:>cmd /K C:\Temp\(a\echo.bat 'C:\Temp\' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:> 上記のように1は正常に処理され2はうまく処理されません。 解決策をひたすら検索したのですが見つからず なんとなくだいたい分かったのが一部『(』や『)』や『&』や『@』や『^』などの記号が混じるとどうやらうまく処理できないようです。 なぜ処理できないのか?と、如何すればこれを回避して実行できるか分かる方がいればよろしくお願いします。 備考: (現状の緊急回避として記号のあるパスは記号のないパスから経由batを生成する方法を思いつきましたが自分で馬鹿だと思います) (経由バッチの中身が"C:\Temp\(a\echo.bat"ならば実行できるから) また、cmd /K "C:\Temp\(a\echo.bat" では実行できませんでした。 OSはXPです。コマンドプロンプトヴァージョンは(Microsoft Windows XP [Version 5.1.2600])です

  • Rubyの実行のしかた

    Ruby(プログラミング)初心者です。 Rubyの実行の仕方について質問させて下さい。 コマンドプロンプト(マックなのでターミナルですが)で ruby Test.rb と打ち込んで実行しているのですが、これは普通なのでしょうか? 新しい言語で、しかもインタプリタ形式だからワンステップずつ実行できると聞いていたのですが、これだと何とも古くてコンパイルしたのと変わらない様な気がします。

  • Rubyの起動がうまくできません

    http://www.ruby-lang.org/ja/ ここを見て色々やっています。 全くの初心者でとまどっております。 ちなみにコマンドプロンプトでruby -vを入力するとrubyがインストールされているコマンドが出るのですが、rubyが起動しません。 色々やってしまっているので、出来れば最初からやり直したいとも思っております。 宜しくお願い申し上げます

  • DOSプロンプトからFTPのスクリプトバッチが起動できない

    Win2000Proです。 以下のようなBATファイルとスクリプトバッチファイルを作成しました。 ---FTP.bat--- (1)pause (2)ftp -n -s:aaa.txt (3)pause ---aaa.txt--- op localhost user user pass ls close quit このBATファイルを実行すると(1)(2)文の無限ループになってしまい 肝心のftpコマンドは実行されません。 DOSプロンプトから手入力で入力すると実行はできます。 また、BATファイル自体、 (1)pause (2)dir (3)pause のように書き換えると問題なく実行できます。 (1)pause (2)ftp (3)pause のように書き換えても同じくループされます。 わかる方いらっしゃいますでしょうか? よろしくお願いします。

  • BATファイル実行にフォーカスを当てたい

    Windows2008サーバにRDPでWindows7から実行しています。 サーバにBATファイルを作成し、(XCOPYコマンド)データのバックアップを行います。 この時ですが、クライアント(Windows7)で実行させたBATファイルですが(コマンドプロンプト)画面が なぜか背面にかくれてしまい、BATの実行内容がみれなくなることがあります。また、BATの終了時に、正常終了かどうかの表示を行い、Pauseコマンドで止めていますが、これが、背面にかくれてしまい、いつ終ったのかわからない状態です。ずーっとBAT自動されたコマンドプロンプトの表示にフォーカスを当てたいのですが、BATに記述することにより、再度フォーカスを取り戻すようなコマンドはあるでしょうか?よろしくお願いします。

  • ruby初心者です

    RDEを使っています。 input_value = gets puts input_value p input_value    を書くと、上に書いたprint文などより先に左下のコンソールに 先に入力するようになります。 コマンドで実行するとうまくいくのですが。 何か設定が間違っているのでしょうか? 教えていただければたすかります。

    • ベストアンサー
    • Ruby
  • Ruby vim 実行の仕方

    Rubyをvimで書いたので、実行しようとしたのですが、実行できないです。何がダメなのでしょうか? 手順としては、 vimで puts("Hello World!")と書きました。 w hello_ruby.rbと書いて保存しました。 コマンドプロンプトを開いて、hello_ruby.rbと入れて、Enterを押したのですが、 ’hello_ruby.rb’は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出ます。 コマンドプロンプトで、ruby -v と入れると、Rubyのバージョンは出てきます。 何がいけないのでしょうか?修正の仕方を教えてください。 詳しい方いらっしゃいましたら、よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • RubyとMeadow(Emacs)について

    RubyとMeadow(Emacs)について 自分のパソコンにRubyとMeadowをインストールしたんですが、 Meadowでソースプログラムを作ってからコマンドプロンプトでそれを実行しようとすると ’ruby’は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出てきてしまいます。 どうすれば実行できるのでしょうか? 教えていただきたいです。 ちなみにこれは夏休みの宿題で、 プリントに書かれていたとおりにやりました。 間違いがないか自分でなんども確認しましたが、 たぶん書いてあることは間違っていないと思います。 どのようにやったかというと、 Meadowでhello.rbというファイルに print("Hello, Ruby World !\n") と打ち込み、c:\progIに保存。 コマンドプロンプトを開いて progIに移動し、 ruby hello.rb →[Enter] です。

    • ベストアンサー
    • Ruby
  • MS-DOSの起動ディスクでループする?

    どうにもいきづまってしまいましたのでお力を貸して下さい。 WindowsXPからMS-DOSの起動ディスクをフロッピーディスクで作成してAUTOEXEC.BATに下のように書いたのですがメニューから入力するところで止まらずうまくいきません。 Windowsのコマンドプロンプト上ではうまくいくのですが、調べてみたらコマンドプロンプトとMS-DOSが別ものということはわかったのですがどのように直していいかわかりません。 すみませんがご教授いただけないでしょうかよろしくお願いします。 環境 OS:Windows XP Pro PC:NEC VersaPro :Main cls @echo off rem メニュー echo キー入力後、エンターで決定して下さい echo [0] 処理 echo [E] 終了 rem 入力値の取得 set /p input= if defined input set input=%input:"=% rem 入力値判断 if /i "%input%" == "0" (goto KAKUNIN) if /i "%input%" == "E" (goto exit) else goto Main goto main :KAKUNIN cls echo 処理をしていいですか? Y/N set /p input= if defined input set input=%input:"=% if /i "%input%" == "Y" (goto SYORI) if /i "%input%" == "N" (goto Main) else goto KAKUNIN :SYORI 処理をする pause :exit

専門家に質問してみよう