Você não pode "abrir um PTY para um programa". Um PTY é um pseudo-terminal; requer um terminal final. Se você quiser se comunicar com um programa diretamente através de um terminal, o programa precisaria criar um terminal (ou seja, para se comportar como um emulador de terminal).
Em vez disso, você pode executar o programa em um terminal, como a tela . A tela facilita a injeção de entrada e leitura de saída de programas.
No entanto, para o que você está fazendo, um terminal apresentaria complicações inúteis. Um soquete é exatamente a ferramenta certa para o que você quer fazer - comunicação bidirecional direta entre dois programas. (Para comunicação unidirecional, um pipe seria a ferramenta certa.) A única vantagem de usar um terminal é se você não controla uma das extremidades e insiste em armazenar em buffer a saída por bloco e não por linha se a saída não for em um terminal.