質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

734閲覧

Ruby popenって?

kazuyakazuya

総合スコア193

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2019/06/18 00:41

編集2019/06/18 07:50

ruby

1while c = STDIN.getc 2 STDOUT.puts(c) 3end 4

ruby

1out_p = IO.popen('ruby sample.rb','w') 2count = 0 3loop do 4 out_p.print(count,"/n") 5 count +=1 6 sleep 1 7end 8

参考書でこのプログラムコードを見たのですが

これは結局なにがしたいのですか?
あとで詳しく追記します。

追記

参考書
イメージ説明

今回の場所 一応画像も
イメージ説明
イメージ説明

3枚目に今回質問したサンプルコードがあります。
質問1 すこし見にくいですが
リスト5.2に外部コマンドへの出力パイプの生成とありますが
これはどう意味ですか?
つまりこれで何ができるのでしょうか?
まずそこからわからないのです・・・

リスト5.1が標準入力から1バイトずつ読みだして、標準出力に出す
というのは理解できたんですが
リスト5.1 cat.rb
の下の解説欄を見た時から???ってかんじです。

質問2
リスト5.1とリスト5.2のコードは別々のファイルに書くのですか?

不明点はコメントで教えてくださいお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/06/18 00:43

その「参考書」に解説はないのですか?
kazuyakazuya

2019/06/18 00:45

返信ありがとうございます 時間の関係であとで載せます。
otn

2019/06/18 00:54

結局何がしたいと言われても、サンプルプログラムなので。 プログラムの動作が想像できないと言う事ですか?
kazuyakazuya

2019/06/18 07:48

プログラムの動作というより このプログラムで何をしたいの?からわからないのです・・・
kazuyakazuya

2019/11/01 04:08

コメント削除はできないみたいですね・・・。
guest

回答2

0

ベストアンサー

外部コマンドへの出力パイプの生成とありますが

シェルにおける「パイプ」の概念がわからないと、理解できないと思います。
端末なり、コマンドプロンプトから、コマンドを入れて実行したことはありますか?
そのあたりの、コマンド操作について入門する必要があるかと思います。
もしくは、このセクションを飛ばして先に進むか。

投稿2019/06/18 07:52

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/06/18 07:54

コマンドプロンプトつまり ここでいうところの外部コマンドは使っています
otn

2019/06/18 07:58

dir | ruby sample.rb で、何をやっているかわかりますか?
kazuyakazuya

2019/06/18 07:58

すこし質問代えます 外部コマンドのプロセスとの間に通信用のパイプを開くことでなにができるのですか?
kazuyakazuya

2019/06/18 08:04

dir コマンドは使ったことないですが・・・ 指定したパスのディレクトリやファイル一覧を示すコマンド
otn

2019/06/18 08:10

dir | ruby sample.rb は、dir コマンドが画面に表示する代わりに、ruby sample.rbの入力にそのまま渡されます。 dir > file ruby sample.rbn < file というファイルへのリダイレクトが理解できるのであれば、それと同様の効果があります。
otn

2019/06/18 08:34

> ありがとうございます ?? popenを理解できたと言う事ですか?
kazuyakazuya

2019/06/18 08:42

確実にあっているかわかりませんが 標準入力結果をsample.rbに渡して加工させる popenを理解>>いえ...
otn

2019/06/18 09:14

2つめのプログラムは、1つめのプログラムを子プロセスとして起動して、 1秒ごとに数字を、1つめのプログラムの入力に渡しています。 2つのプログラムは同時並行して動いています。
kazuyakazuya

2019/06/18 09:30

ありがとうございます 動作はわかりました そもそも標準入力出力の認識から間違っていたのでそこから調べ直します...
otn

2019/06/18 09:39

パイプの場合、 プログラムXの標準出力==プログラムYの標準入力 なので、用語に気をつけないと間違います。
kazuyakazuya

2019/06/18 10:00

最後にお願いします このサンプルプログラムでは標準出力先(?)を cat.rbとしていますが だとしたらこのプログラムの実行結果をすべはないということですか?
kazuyakazuya

2019/06/18 10:05

あ、すみません なんでもないです
otn

2019/06/18 10:06

出力は同時には1カ所にしか送れません。
guest

0

質問2
リスト5.1とリスト5.2のコードは別々のファイルに書くのですか?

はい。

質問1 すこし見にくいですが
リスト5.2に外部コマンドへの出力パイプの生成とありますが
これはどう意味ですか?
つまりこれで何ができるのでしょうか?
まずそこからわからないのです・・・

リスト5.1が標準入力から1バイトずつ読みだして、標準出力に出す
というのは理解できたんですが
リスト5.1 cat.rb
の下の解説欄を見た時から???ってかんじです。

リスト5.1(cat.rb)の標準入力に対して文字列を書けます。

標準入力をキーボードからの入力で
標準出力をディスプレイへの出力のことと思っていると
多分この話が一生わからないです。

参考

投稿2019/06/18 08:12

編集2019/06/18 08:14
ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/06/18 08:38

ありがとうございます リスト5.1の標準入力に値を渡すことができるとあるのですが どう動作したら渡せますか?
ozwk

2019/06/18 09:00

Q「この(5.2)コードは何を目的としているんですか」 A「こういうことができます」 Q「どうやるんですか」 <- ???
kazuyakazuya

2019/06/18 09:33

すみません なんでもないです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問