4

foo私のスクリプトの一部は、別のモジュール(ずっと前に誰かによって書かれたもので、今は変更を開始したくない)から関数を呼び出します(それを呼び出しましょう)。他の関数も呼び出すことによって、部分
foo的に興味深いものを書き込みstdoutます(ただし戻ります)。に書き込むNoneこれらの興味深いものにアクセスしたいと思います。foostdout

私の知る限り、subprocess通常はコマンドラインから呼び出すコマンドを呼び出すことを意味します。スクリプトから呼び出すPython関数に相当するものはありますか?

重要な場合は、python2.7を使用しています

4

1 に答える 1

4

@JimDevilleがコメントしたように、stdoutを交換できます。

#!python2.7
import io
import sys

def foo():
    print 'hello, world!'

capture = io.BytesIO()
save,sys.stdout = sys.stdout,capture
foo()
sys.stdout = save
print capture.getvalue()

出力:

hello, world!

Python 3バージョンは、Unicodeストリームであると予想されるio.StringIOため、代わりに次を使用します。stdout

#!python3
import io
import sys

def foo():
    print('hello, world!')

capture = io.StringIO()
save,sys.stdout = sys.stdout,capture
foo()
sys.stdout = save
print(capture.getvalue())
于 2013-01-20T08:30:06.130 に答える