this hack seems to work in an interactive session:
import sys
import threading
import subprocess
sclang_proc = subprocess.Popen(
['sclang'],
stdin=subprocess.PIPE,
stdout=sys.stdout,
stderr=subprocess.STDOUT,
bufsize=1,
universal_newlines=True,
start_new_session=True)
# Needs to be running free. A problem is stdout blocking stdin.
threading.Thread(target=lambda: sclang_proc.wait(), daemon=True).start()
def sceval(string):
if not string.endswith('\n'):
string += '\n'
sclang_proc.stdin.write(string)
sclang_proc.stdin.flush()
# Test.
# sceval('2 + 2')
# sceval('"holi".postln;')
# for i in range(100):
# sceval(f'{i} * 2')