Linux:os.pipe()的文件描述符未出现在/ dev / fd中

时间:2018-07-23 19:45:21

标签: python pipe

过去,我看到所有打开的文件描述符的虚拟文件都出现在/dev/fd中。但是,当前我正在使用Amazon Linux,并且在Python程序中运行os.pipe()时看不到新的文件描述符。

例如:

MASTER:hadoop@imrdasem2d14$ ls -l /dev/fd/
total 0
lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 0 -> /dev/pts/0
lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 1 -> /dev/pts/0
lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 2 -> /dev/pts/0
lr-x------ 1 hadoop hadoop 64 Jul 23 15:39 3 -> /proc/30933/fd
MASTER:hadoop@imrdasem2d14$ %
python
>>> import os
>>> a,b = os.pipe()
>>> c,d = os.pipe()
>>>
[2]+  Stopped                 python
MASTER:hadoop@imrdasem2d14$ !ls
ls -l /dev/fd/
total 0
lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 0 -> /dev/pts/0
lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 1 -> /dev/pts/0
lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 2 -> /dev/pts/0
lr-x------ 1 hadoop hadoop 64 Jul 23 15:39 3 -> /proc/31001/fd
MASTER:hadoop@imrdasem2d14$ 

但是很明显,管道正在工作:

a,b,c,d
(3, 4, 5, 6)
>>> os.write(b,b"foo")
3
>>> os.read(a,3)
b'foo'

那么为什么我的3、4、5和6的文件描述符不在/ dev / fd中?

1 个答案:

答案 0 :(得分:3)

/dev/fd的内容是特定于进程的。您正在查看ls进程的文件描述符,而不是Python进程的文件描述符。

让您的Python进程检查内容:

os.listdir('/dev/fd')

例如:

>>> import os
>>> os.listdir('/dev/fd/')
['0', '1', '2', '3']
>>> a,b = os.pipe()
>>> os.listdir('/dev/fd/')
['0', '1', '2', '3', '4', '5']
>>>