自分自身の出力ストリームを定義することによってsubprocess.callのリアルタイム出力を取得しようとしていますが、動作しないようです。subprocess.call用のカスタム出力ストリームを作成する方法
理由:私は、サブプロセスを実行し、(私はスクリプトを見て、現在の進行状況を見ることができるようにリアルタイムで)ファイル
サブプロセスにそれをログに記録するだけでなく、両方のstdoutにその呼び出しの出力を取得したいです。 PY:
import time
while True:
print("Things")
time.sleep(1)
mainprocess.py
import subprocess
import io
class CustomIO(io.IOBase):
def write(self, str):
print("CustomIO: %s"%str)
# logging to be implemented here
customio = CustomIO()
subprocess.call(["python3", "print_process.py"], stdout=customio)
しかし、私はこのコードを実行するとき、私は、このエラーメッセージが出ます:
をTraceback (most recent call last):
File "call_test.py", line 9, in <module>
subprocess.call(["python3", "print_process.py"], stdout=customio)
File "/usr/lib/python3.4/subprocess.py", line 537, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib/python3.4/subprocess.py", line 823, in __init__
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
File "/usr/lib/python3.4/subprocess.py", line 1302, in _get_handles
c2pwrite = stdout.fileno()
io.UnsupportedOperation: fileno
これが可能であれば、誰でも手掛かりがありますか?
私は間違ったベースクラスを継承していますか?
適切なメソッドがオーバーロードされていませんか?
または、私は完全にレールから外れていて、まったく別のやり方でこれを行うべきですか?
サブプロセスは、実際のosファイル記述子を持つ実際のファイルオブジェクトを期待しています。パイプを試してみてください – georgexsh