Answers:
问题可能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
在python中替换和使用本机套接字。这并不是特别困难。例如,作为客户:
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()