Pythonではsubprocessモジュールを使うとサブプロセスを起動できます。そのサブプロセスにデータを入力し、処理結果をもらいたい場合があります。それもサブプロセスを終わらせず、サーバー的に使いたい。
client.py
#!/usr/bin/env python3
from subprocess import Popen, PIPE
import sys
p = Popen(['cat'], bufsize=0, stdin = PIPE, stdout = PIPE)
while True:
s = sys.stdin.readline()
p.stdin.write(s.encode('utf-8'))
output = p.stdout.readline()
print(output.decode('utf-8'), end='')
Popenの引数のbufsitze=0がキモです。また、起動されるサブプロセス(この場合はcat)の出力はバッッファリングしない(出力ごとにflushする)必要があります。ソースがなくて改造できないコマンドでも、出力をバッファリングしないオプションがある場合がありますので、確かめてください。