我是python的新手:)我想创建持久套接字。我试图使用文件描述符来做到这一点。我试过的是:
打开套接字套接字连接s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
获取文件描述符编号fd = s.fileno()
以I / O os.open(fd)
但我得到OSError: [Errno 9] Bad file descriptor
我说我是python的新手,也许我对实现有误。但我尝试了一个更简单的示例os.close(s.fileno())
,我得到了同样的错误OSError: [Errno 9] Bad file descriptor
我找到了一个用ruby编写的例子,我测试了它,它的工作原理。 How do I make persistent network sockets on Unix in Ruby?
任何人都可以为我写这个python,我想要实现的是: socket_start.py google.com(将打印fd号码) 睡10 socket_write.py fd_number'something' 睡10 socket_read.py fd_number 1024
我希望你明白我想做什么。谢谢你的建议!
在您的回复后,我尝试了下一个代码:
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('google.com', 80))
s.send('GET /\n')
print s.fileno()
#!/usr/bin/python
import os
import sys
fd = int(sys.argv[1])
os.read(fd, 1024)
错误为OSError: [Errno 9] Bad file descriptor
我确定问题是什么(我是一名php开发人员)。我认为与php相同,python在关闭脚本后删除垃圾。如何在python中解决这个问题?
答案 0 :(得分:1)
您使用os.fdopen()打开文件描述符。
我真的很惊讶你已经走得那么远,因为os.open
需要一个文件名和标志,说明打开文件的模式,例如fd = os.open('foo.txt', os.O_RONLY)
。正如我的示例所示,返回文件描述符而不是接受文件描述符。
答案 1 :(得分:0)
如果要通过命令行(即套接字)上收到的参数重新创建套接字,请使用socket.fromfd