[英]How to join the stdout of two subprocesses and pipe to stdin of new subprocess in python
[英]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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.