문제는 아마도 nc
양방향 연결이지만 popen()
한 가지 방법 만 사용 한다는 것입니다 . 원격 서버가 연결에서 읽기를 시도하면 nc는 설정하지 않은 stdin에서 읽으므로 eof가 발생하여 연결이 닫힙니다.
popen()
양방향 을 사용하는 대신 subprocess.Popen()
.
import subprocess
cmd = "nc -v [MY IP] [Port]"
p = subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
당신은 할 수있다 msg = p.stdout.readline()
거나 p.stdin.write("reply\n")
, 또는 p.communicate(...)
에서 설명한대로 온라인 문서 또는하여 pydoc subprocess.Popen
.
또는 더 간단하게 nc
파이썬에서 기본적으로 소켓을 교체 하고 사용할 수 있습니다 . 특별히 어렵지 않습니다. 예를 들어, 클라이언트로서 :
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()