为什么 python subprocess.Popen 需要 close_fd 参数?

Why python subprocess.Popen need close_fd parameter?

创建一个子进程似乎需要从调用者那里关闭一些 fd,例如,如果调用者打开了 fd 0,1,2(stdin,out,err) 和 fd=3(名为 "a.txt" 的文件), subprocess.Popen 设置 "close_fd=True",如

p=subprocess.Popen(cmd,shell=True,close_fds=True,stdout=None...

是否表示:

(1) fd 0-3 在子进程中关闭?

(2) 如果 fd 0-3 关闭,子进程如何将打印行打印到屏幕,或通过以下方式将其 input/output 与调用者通信:

p.communicate()

只是有点困惑。解释?

只有3关闭了。来自 Popen docs:

If close_fds is true, all file descriptors except 0, 1 and 2 will be closed before the child process is executed. (POSIX only).