从管道读取时出现Python的“坏文件描述符”错误

3
我将尝试启动一个子进程并传递一个管道文件描述符给它以便从中读取。然而,当我尝试在子进程中从管道中读取时,我会得到“坏的文件描述符”错误,即使我在父进程中可以很好地读取管道。
以下是父进程的代码:
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
这是一个 bug 还是我做错了什么?在父进程中调用 get_inheritable 返回 true。但由于某种原因,子进程无法使用文件描述符。 - kasra
1个回答

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接