以更人性化的方式使用文件描述符
filedes的Python项目详细描述
fdinfo
fdinfo是一个python库,用于以更直观的方式使用文件描述符。
示例
使用sou reuseadr(或bsd上的sou reuseport)创建套接字:
fromfiledesimportFDs=socket.socket()FD(s).socket.set_reuse()
在管道上启用非阻塞模式
importosfromfiledesimportFDr,w=os.pipe()FD(r).set_nonblocking()
为临时文件禁用“执行时关闭”位
importtempfilefromfiledesimportFDtf=tempfile.NamedTemporaryFile()FD(tf).set_cloexec(False)
列出当前PID的打开FD及其类型:
fromfiledesimportFD,get_open_fdsforfdinget_open_fds():printfd,FD(fd).typestr
通过Unix套接字将FDS发送到另一个进程
fromfiledesimportFD# Send a single FDFD(sock).socket.send_fd(an_fd)# Or for multiple FDsFD(sock).socket.send_fds(multiple_fds)# To receive one fd (in a different pid)an_fd=FD(sock).socket.recv_fd()# To receive multiple fds (in a different pid)two_fds=FD(sock).socket.recv_fds(2)
主要功能
- 获取有关本地和外部进程中FD的详细信息
- 直接对描述符对象执行fcntl和io操作
- UnitTest帮助程序类,用于确保测试不会泄漏FD或线程。
- 以更自然的方式设置各种fd标志,例如fd.set_cloexec()或fd.set_nonblocking()
- socket helpers允许您以一种更自然的方式设置socket选项,例如fd.socket.set戋reuse()
- 对于具有高fs.file-max集的系统,popen()子类具有更智能的关闭fds
平台
fdinfo主要是在linux上开发的,但它并不只是在linux上工作。 它已在以下平台上测试:
- Linux
- OSX
为达尔文开发是很棘手的,因为没有procf,所以有些 对不同PID中的文件描述符的操作可能无法按预期工作