Похоже, что он зависает, потому что вы не ввели новую строку (\ n) для выходного порта. Вот как я запустил ваш код:
#lang racket
(define-values (sp i o e) (subprocess #f #f #f
"/usr/bin/python"
"/tmp/foo.py"))
(display "server\n" o)
(flush-output o)
(display (read-line i))
... с кодом, который вы указали в "/tmp/foo.py", и я увидел вывод:
Enter something: you entered server
... что я и ожидал.
Единственное интересное отличие состоит в том, что я добавил символ новой строки к выводу.
Обратите внимание, что я поменял имена ваших «o» и «i», потому что мне не нравился тот факт, что «o» был входным портом.