2014-09-01 116 views
2

是否有可能編寫python單線程,它將在特定的TCP端口上偵聽,接受連接並響應任何內容。Python單線無聲插座監聽器

我可以在兩線做到這一點:

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 2014-09-02 00:44:54

回答

4

使用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()) 

您也可以使用其他無限迭代器像itertools.cycleitertools.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工作與Python - C ? – bluefoggy 2014-09-01 16:17:31

+0

@ kingsdeb,'python -c「....」(用給定的單行代替'......') – falsetru 2014-09-01 16:21:03

+0

@kingsdeb,用'-c'選項python將給定的字符串解釋爲程序內容。 – falsetru 2014-09-01 16:21:49