通过python连接后,Netcat连接关闭


0

所以我在我的覆盆子pi和我的mac上安装了Netcat,我可以让它们很容易连接。问题是,如果我想在我的mac上使用python脚本在树莓派已经在监听连接时建立连接。它将连接,但它将关闭imediatly连接。我用这个代码。

Import os os.popen("nc -v [MY IP] [Port]")

我想这样做的原因是我可以通过Netcat在Netcat Eg上发送命令

os.popen("Hello other computer")

我怎样才能解决这个问题。谢谢。

Answers:


0

问题可能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()

谢谢。我想我仍然可以在本机python套接字上使用子进程,因为在另一端是使用servoblaster的覆盆子pi。所以使用子进程我不需要在pi端使用python。同样使用nc,使用'> / dev / servoblaster'写入servoblaster设备文件非常简单,但是使用套接字我必须打开设备文件然后写入它然后刷新它或关闭它。
ferret249 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.