0

外部プログラム(この場合はpython -V)を実行して、メモリ内の標準エラーをキャプチャしようとしています。

ディスクにリダイレクトすると機能します。

import sys, os
import subprocess
import tempfile
err = tempfile.mkstemp()
print err[1]
p = subprocess.call([sys.executable, '-V'], stderr=err[0] )

しかし、それは楽しいことではありません。次に、そのファイルをメモリに読み込む必要があります。

StringIOを使用してファイルのように動作するメモリ内に何かを作成できると思いましたが、この試みは失敗しました。

import sys, os
import subprocess
import tempfile
import StringIO

err = StringIO.StringIO()
p = subprocess.call([sys.executable, '-V'], stderr=err )

私が得た:

AttributeError: StringIO instance has no attribute 'fileno'

ps。これが機能したら、stdoutもキャプチャしたいと思いますが、それは同じだと思います。ps2。上記をWindowsとPython2.7.3で試しました

4

2 に答える 2

2

設定する必要がありますstderr = subprocess.PIPE

例えば:

p = subprocess.Popen(...,stderr = subprocess.PIPE)
stdout,stderr = p.communicate()
#p.stderr.read() could work too.

これが機能するには、オブジェクトにアクセスする必要があるPopenため、ここでは実際には使用できませんsubprocess.call(実際には が必要ですsubprocess.Popen)。

于 2013-01-14T16:33:47.490 に答える
0

subprocess.check_outputを使用します。ドキュメントから

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
Run command with arguments and return its output as a byte string.
于 2013-01-15T18:24:50.780 に答える