Python > SuperCollider interaction

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')

2 Likes