Python one liner静音套接字监听器

Nik*_*lub 3 python sockets

是否可以编写python one-liner,它将侦听特定的tcp端口,接受连接,并且不响应任何内容.

我可以用两行来做到这一点:

import socket; s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.bind(("", 5555)); s.listen(1); accepter = s.accept();
while True: data = accepter[0].recv(1024);
Run Code Online (Sandbox Code Playgroud)

但是我想从中运行它python -c,所以它应该是一行.

我怎样才能做到这一点?

fal*_*tru 5

使用itertools.countreduce(在Python 3.x中,您需要使用functools.reduce):

import socket, itertools; s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.bind(('', 5555)); s.listen(1); accepter = s.accept(); reduce(lambda x, y: accepter[0].recv(1024), itertools.count())
Run Code Online (Sandbox Code Playgroud)

你也可以像itertools.cycle或那样使用其他无限迭代器itertools.repeat.

以下行是上述单行的扩展版本.

import socket, itertools
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 5555))
s.listen(1)
accepter = s.accept()
reduce(lambda x, y: accepter[0].recv(1024), itertools.count())
Run Code Online (Sandbox Code Playgroud)