Blog: 2024-02-13

From razwiki
Jump to navigation Jump to search

How does this work but it doesn't seem to when you use the read and write methods on the io objects?

proc = subprocess.Popen(['bc'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
os.write(proc.stdin.fileno(), b'100+200\n')
print(os.read(proc.stdout.fileno(), 4096))

https://stackoverflow.com/questions/39899074/communicate-multiple-times-with-a-subprocess-in-python

Ok it was about: buffering and flushing

import os
import subprocess

proc = subprocess.Popen(['bc'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
proc.stdin.write(b'100+200\n')
proc.stdin.flush()
print(proc.stdout.readline())

flush was missing, and readline reads just a line rather than read which blocks