我将尝试启动一个子进程并传递一个管道文件描述符给它以便从中读取。然而,当我尝试在子进程中从管道中读取时,我会得到“坏的文件描述符”错误,即使我在父进程中可以很好地读取管道。
以下是父进程的代码:
以下是父进程的代码:
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()
以下是子进程的代码:
import sys
import os
r = int(sys.argv[1])
print("[Client]", os.read(r, 5))
非常感谢您的帮助。
os.set_inheritable()
没有生效。我尝试了一个类似的脚本,在子进程中运行lsof -p $$
,但它并没有显示 pipe 文件描述符是打开的。 - Barmar