![通过python连接后Netcat连接关闭](https://linux22.com/image/1461115/%E9%80%9A%E8%BF%87python%E8%BF%9E%E6%8E%A5%E5%90%8ENetcat%E8%BF%9E%E6%8E%A5%E5%85%B3%E9%97%AD.png)
因此,我在 Raspberry Pi 和 Mac 上安装了 Netcat,这样我就能非常轻松地让它们连接。问题是,如果我想在 Mac 上使用 Python 脚本在 Raspberry Pi 已在监听连接时建立连接。它会连接,但随后会立即关闭连接。我使用此代码。
Import os os.popen("nc -v [MY IP] [Port]")
我这样做的原因是我可以通过 Netcat 使用 python 发送命令,例如
os.popen("Hello other computer")
我该如何修复此问题?谢谢。
答案1
问题可能是这nc
是一个双向连接,但popen()
只使用一种方式。当远程服务器尝试从连接中读取时,nc 将从其 stdin 读取,而您没有设置 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()