1. ホーム
  2. python

[解決済み] スクリプトから標準出力をキャプチャしますか?

2022-10-27 18:45:36

質問

このようなスクリプトがあったとします。

# module writer.py
import sys

def write():
    sys.stdout.write("foobar")

の出力をキャプチャしたいとします。 write 関数の出力をキャプチャして変数に格納し、さらに処理を行いたいとします。素朴な解決策は

# module mymodule.py
from writer import write

out = write()
print out.upper()

しかし、これはうまくいきません。別の解決策を思いつき、それは動作しますが、問題を解決するためのより良い方法がある場合は、教えてください。ありがとうございます。

import sys
from cStringIO import StringIO

# setup the environment
backup = sys.stdout

# ####
sys.stdout = StringIO()     # capture output
write()
out = sys.stdout.getvalue() # release output
# ####

sys.stdout.close()  # close the stream 
sys.stdout = backup # restore original stdout

print out.upper()   # post processing

どのように解決するのですか?

設定方法 stdout は合理的な方法です。 もう一つは、別のプロセスとして実行することです。

import subprocess

proc = subprocess.Popen(["python", "-c", "import writer; writer.write()"], stdout=subprocess.PIPE)
out = proc.communicate()[0]
print out.upper()