Just so there’s no magic: you can only write data into a process’s STDIN; STDERR is always an output FD you can only read or redirect. If you want to feed your program on fd 2 (e.g. it actually does an os.read(2,…)), you must dup your stdin‐pipe onto fd 2 in the child before exec. Otherwise just use send/sendline to write to STDIN and stderr=PIPE (or a file) to capture its error‐output.