2014-09-01 1 views
2

Можно ли написать однострочный Python, который будет прослушиваться на определенном порту tcp, принимать соединения и ничего не реагировать.Python one liner silent socket listener

я могу сделать это в две строки:

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, поэтому она должна быть одна строка.

Как я могу это достичь?

+1

Примечание: http://stackoverflow.com/questions/2043453/executing-python-multi-line-statements-in-the-one-line-command-line – Veedrac

ответ

4

Использование 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()) 
+0

Как работает Oneliner работу с питоном - c? – bluefoggy

+0

@kingsdeb, 'python -c" .... "' (Заменить '...' с заданным однострочным) – falsetru

+0

@kingsdeb, с опцией '-c' python интерпретировать данную строку как содержимое программы. – falsetru

Смежные вопросы