如何将python套接字传递给stdin / stdout

时间:2012-08-30 21:38:48

标签: python sockets pipe

我需要编写一个应用程序来联系服务器。发送一些消息后,应该允许用户通过发送命令和接收结果与服务器进行交互。

我应该如何管理当前套接字,以便用户可以与服务器进行交互而无需读取输入和从/向stdin / stdout写入输出?

2 个答案:

答案 0 :(得分:2)

你的意思是喜欢使用netcat吗?

cat initial_command_file - | nc host:port

答案是,某些需要读写。在上面的示例shell脚本中,cat按顺序从两个源读取,并写入单个管道; nc从该管道读取并写入套接字,但也从套接字读取并写入其stdout

因此总是会进行一些读写操作......但是,您可以构建代码,这样就不会侵入通信逻辑。

例如,您使用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))

答案 1 :(得分:-1)

你可能想要像pexpect这样的东西。基本上你创建一个spawn对象来启动连接(例如通过ssh),然后使用该对象的expect()sendline()方法发出你想要发送的命令提示。然后,您可以使用interact()方法将控制权交给用户。