簡體   English   中英

如何將python套接字管道傳輸到stdin / stdout

[英]How to pipe python socket to a stdin/stdout

我需要編寫一個與服務器聯系的應用程序。 發送一些消息后,它應該允許用戶通過發送命令與服務器進行交互並接收結果。

我應該如何通過管道傳輸當前套接字,以便用戶可以與服務器交互,而無需從stdin / stdout讀取輸入或向stdin / stdout寫入輸出?

您是說喜歡使用netcat?

cat initial_command_file - | nc host:port

答案是, 有些東西需要讀寫。 在上面的示例Shell腳本中, cat依次從兩個源讀取數據,並寫入單個管道。 nc從該管道讀取並寫入套接字,但也從套接字讀取並寫入其stdout

因此, 總會有一些讀寫過程。但是,您可以構造代碼,以免干擾comms邏輯。

例如,您使用itertools.chain創建一個行為類似於cat的輸入迭代器,因此面向TCP的代碼可以采用單個可迭代輸入:

def netcat(input, output, remote):
    """trivial example for 1:1 request-response protocol"""
    for request in input:
        remote.write(request)
        response = remote.read()
        output.write(response)

handshake = ['connect', 'initial', 'handshake', 'stuff']
cat = itertools.chain(handshake, sys.stdin)

server = ('localhost', 9000)
netcat(cat, sys.stdout, socket.create_connection(server))

您可能想要像pexpect之類的東西 基本上你想創建一個spawn是initates連接對象(例如,通過ssh ),然后使用該對象的expect()sendline()方法來發出要在提示發送命令。 然后,您可以使用interact()方法將控制權移交給用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM