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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

python sys.stdout.close() とは

akiyama3284pga
akiyama3284pga

総合スコア53

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

3回答

0評価

0クリップ

406閲覧

投稿2022/01/16 12:43

編集2022/01/18 05:53

pythonのプログラム内におきまして、

sys.stdout.close()

p1 = subprocess.Popen(['ls'], stdout=subprocess.PIPE) p2 = subprocess.Popen(["grep", "txt"], stdin=p1.stdout, stdout=subprocess.PIPE) p1.stdout.close() output = p2.communicate()[0]

のようにclose()というものがあると思うのですが、
両者は同じものなのでしょうか?

後者ではclose()の行が無くても意図する動作は得られました。

また、その機能につきましても調べてみても適格な答えが見つかりませんでしたので
ご質問させていただきました。

よろしくお願いいたします。<(_ _)>

自分のためのメモ

# 指定したプログラム(orファイル)でファイルを開くのが、 # popen()、つまりpopen()は内部で新規のopen(, 'rb')のようなことをしている。 # openされた新規臨時ファイルには、渡されたプログラムの標準出力が書き込まれる。 # shファイルなどを渡されても同様それを実行した標準出力を書き込む。 # stdout引数にPIPEが指定されていると、作成されるインスの変数stdoutにそのファイルオブが # セットされる。 p1 = subprocess.Popen(['ls'], stdout=subprocess.PIPE) # バイナリモードの場合は読み込み(openのrb引数)はio.BufferedReaderファイルオブが返る。 print(p1.stdout) # <_io.BufferedReader name=4> ※バイナリ指定のファイルオブ # name=4の4は通常にopen()使用した際はファイル名になるので、popenが付けてるファイル名 # この数値は被ることがないようになっているようだ。 # 当然read()やreadline()などファイルオブが持つメソを使える。(同じオブだから当然) # ただしcommunicateなどはpopen独自のものだから、p1.communicate()のように使う。 # ファイルの利用が終われば close(ファイルオブのインスメソ)を使ってファイルオブジェクトを閉じる後処理をする。 # これをしなければどんなリスクがあるのかは、f.close()しない場合と全く同じこと。 p1.stdout.close() # close()した後にprint(p1.stdout.read())としても当然ValueError: read of closed file # ただし、seek(0)で元に戻して再度read()しようとしてみるとio.UnsupportedOperation: File or # stream is not seekable.になった。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。