Вы имеете в виду использование netcat?
cat initial_command_file - | nc host:port
ответ, что-то нужно читать и писать. В приведенном выше примере сценария оболочки cat
читает из двух источников в последовательности и записывает в один канал; nc
считывает с этого канала и записывает в сокет, но также считывает из сокета и записывает его в stdout
.
Таким образом, будет всегда будет чтение и запись ... однако вы можете структурировать свой код, чтобы он не вторгался в логику связи.
Например, можно использовать itertools.chain создать входной итератор, который ведет себя аналогично cat
, так что ваш TCP-облицовочный код может принимать один входной Iterable:
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))