質問編集履歴
5
更新
test
CHANGED
File without changes
|
test
CHANGED
@@ -27,13 +27,14 @@
|
|
27
27
|
# 自分のためのメモ
|
28
28
|
```
|
29
29
|
# 指定したプログラム(orファイル)でファイルを開くのが、
|
30
|
-
# popen()、つまりpopen()は内部でopen(, 'rb')のようなことをしている。
|
30
|
+
# popen()、つまりpopen()は内部で新規のopen(, 'rb')のようなことをしている。
|
31
|
-
# openされたファイルには、渡されたプログラムの標準出力が書き込まれる。
|
31
|
+
# openされた新規臨時ファイルには、渡されたプログラムの標準出力が書き込まれる。
|
32
|
+
# shファイルなどを渡されても同様それを実行した標準出力を書き込む。
|
32
|
-
# stdout引数にPIPEが指定されていると、作成されるインス変数stdoutにそのファイルオブが
|
33
|
+
# stdout引数にPIPEが指定されていると、作成されるインスの変数stdoutにそのファイルオブが
|
33
34
|
# セットされる。
|
34
35
|
p1 = subprocess.Popen(['ls'], stdout=subprocess.PIPE)
|
35
36
|
# バイナリモードの場合は読み込み(openのrb引数)はio.BufferedReaderファイルオブが返る。
|
36
|
-
print(p1.stdout) # <_io.BufferedReader name=4>
|
37
|
+
print(p1.stdout) # <_io.BufferedReader name=4> ※バイナリ指定のファイルオブ
|
37
38
|
# name=4の4は通常にopen()使用した際はファイル名になるので、popenが付けてるファイル名
|
38
39
|
# この数値は被ることがないようになっているようだ。
|
39
40
|
# 当然read()やreadline()などファイルオブが持つメソを使える。(同じオブだから当然)
|
4
追加4
test
CHANGED
File without changes
|
test
CHANGED
@@ -34,6 +34,8 @@
|
|
34
34
|
p1 = subprocess.Popen(['ls'], stdout=subprocess.PIPE)
|
35
35
|
# バイナリモードの場合は読み込み(openのrb引数)はio.BufferedReaderファイルオブが返る。
|
36
36
|
print(p1.stdout) # <_io.BufferedReader name=4>
|
37
|
+
# name=4の4は通常にopen()使用した際はファイル名になるので、popenが付けてるファイル名
|
38
|
+
# この数値は被ることがないようになっているようだ。
|
37
39
|
# 当然read()やreadline()などファイルオブが持つメソを使える。(同じオブだから当然)
|
38
40
|
# ただしcommunicateなどはpopen独自のものだから、p1.communicate()のように使う。
|
39
41
|
# ファイルの利用が終われば close(ファイルオブのインスメソ)を使ってファイルオブジェクトを閉じる後処理をする。
|
3
追加3
test
CHANGED
File without changes
|
test
CHANGED
@@ -39,6 +39,9 @@
|
|
39
39
|
# ファイルの利用が終われば close(ファイルオブのインスメソ)を使ってファイルオブジェクトを閉じる後処理をする。
|
40
40
|
# これをしなければどんなリスクがあるのかは、f.close()しない場合と全く同じこと。
|
41
41
|
p1.stdout.close()
|
42
|
+
# close()した後にprint(p1.stdout.read())としても当然ValueError: read of closed file
|
43
|
+
# ただし、seek(0)で元に戻して再度read()しようとしてみるとio.UnsupportedOperation: File or
|
44
|
+
# stream is not seekable.になった。
|
42
45
|
|
43
46
|
```
|
44
47
|
|
2
追加2
test
CHANGED
File without changes
|
test
CHANGED
@@ -37,6 +37,7 @@
|
|
37
37
|
# 当然read()やreadline()などファイルオブが持つメソを使える。(同じオブだから当然)
|
38
38
|
# ただしcommunicateなどはpopen独自のものだから、p1.communicate()のように使う。
|
39
39
|
# ファイルの利用が終われば close(ファイルオブのインスメソ)を使ってファイルオブジェクトを閉じる後処理をする。
|
40
|
+
# これをしなければどんなリスクがあるのかは、f.close()しない場合と全く同じこと。
|
40
41
|
p1.stdout.close()
|
41
42
|
|
42
43
|
```
|
1
追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -23,3 +23,23 @@
|
|
23
23
|
|
24
24
|
|
25
25
|
|
26
|
+
|
27
|
+
# 自分のためのメモ
|
28
|
+
```
|
29
|
+
# 指定したプログラム(orファイル)でファイルを開くのが、
|
30
|
+
# popen()、つまりpopen()は内部でopen(, 'rb')のようなことをしている。
|
31
|
+
# openされたファイルには、渡されたプログラムの標準出力が書き込まれる。
|
32
|
+
# stdout引数にPIPEが指定されていると、作成されるインス変数stdoutにそのファイルオブが
|
33
|
+
# セットされる。
|
34
|
+
p1 = subprocess.Popen(['ls'], stdout=subprocess.PIPE)
|
35
|
+
# バイナリモードの場合は読み込み(openのrb引数)はio.BufferedReaderファイルオブが返る。
|
36
|
+
print(p1.stdout) # <_io.BufferedReader name=4>
|
37
|
+
# 当然read()やreadline()などファイルオブが持つメソを使える。(同じオブだから当然)
|
38
|
+
# ただしcommunicateなどはpopen独自のものだから、p1.communicate()のように使う。
|
39
|
+
# ファイルの利用が終われば close(ファイルオブのインスメソ)を使ってファイルオブジェクトを閉じる後処理をする。
|
40
|
+
p1.stdout.close()
|
41
|
+
|
42
|
+
```
|
43
|
+
|
44
|
+
|
45
|
+
|