O problema é provavelmente que nc
é uma conexão bidirecional, mas popen()
apenas
usa um caminho. Quando o servidor remoto tenta ler a partir da conexão, o nc irá ler a partir do seu stdin, o qual você não está configurando, então provavelmente ele recebe o eof e assim a conexão é fechada.
Em vez de popen()
, use o% bidirecionalsubprocess.Popen()
.
import subprocess
cmd = "nc -v [MY IP] [Port]"
p = subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
Você pode fazer msg = p.stdout.readline()
ou p.stdin.write("reply\n")
,
ou p.communicate(...)
, conforme descrito nos documentos on-line ou por pydoc subprocess.Popen
.
Alternativamente, e mais simplesmente, você pode substituir nc
e usar soquetes nativamente em python. Não é particularmente difícil. Por exemplo, como cliente:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((MY_IP, PORT))
s.send('Hello, world')
print s.recv(1024) # read reply
s.close()