Если myapp
обрабатывает -
как специальное имя файла, обозначающее stdin, то:
from subprocess import PIPE, Popen
p = Popen(['/path/to/myapp', '-i', '-'], stdin=PIPE, stdout=PIPE)
stdout, _ = p.communicate('\n'.join(inbuff).encode('utf-8'))
outbuff = stdout.decode('utf-8').splitlines()
Если вы не можете передать -
, вы можете использовать временный файл:
import os
import tempfile
with tempfile.NamedTemporaryFile(delete=False) as f:
f.write('\n'.join(inbuff).encode('utf-8'))
p = Popen(['/path/to/myapp', '-i', f.name], stdout=PIPE)
outbuff, conditionbuff = [], []
for line in iter(p.stdout.readline, ''):
line = line.strip().decode('utf-8')
if 'condition' in line:
conditionbuff.append(line)
else:
outbuff.append(line)
p.stdout.close()
p.wait()
os.remove(f.name) #XXX add try/finally for proper cleanup
Для подавления stderr
вы можете передать open(os.devnull, 'wb')
как stderr
в Popen
.