I'm trying to start a subprocess and pass a pipe file descriptor to it to read from. However when I try to read from the pipe in the child process I get "Bad file descriptor", even though I can read from the pipe in the parent process just fine.
Here's the parent process:
import subprocess
import sys
import os
r, w = os.pipe()
os.set_inheritable(r, True)
p = subprocess.Popen(["python3", "client.py", str(r)])
os.write(w, b"hello")
p.wait()
And here's the child process:
import sys
import os
r = int(sys.argv[1])
print("[Client]", os.read(r, 5))
Any help would be much appreciated.
From the official Python docs:
Using the subprocess module, all file descriptors except standard streams are closed, and inheritable handles are only inherited if the close_fds parameter is
False
.