是否可以编写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);
但是我想从python -c
运行它,所以它应该是一行。
我怎样才能做到这一点?
答案 0 :(得分:5)
使用itertools.count
和reduce
(在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())
您还可以使用其他无限迭代器,例如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())