Поэтому я установил Netcat на мой Raspberry Pi и мой Mac, и я могу очень легко подключить их. Проблема в том, что если я хочу, чтобы скрипт Python на моем Mac установил соединение, когда Raspberry Pi уже прослушивает соединение. Он подключится, но затем немедленно закроет соединение. Я использую этот код.

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

Я хочу сделать это потому, что могу отправлять команды через python через Netcat, например

os.popen("Hello other computer")

Как я могу это исправить. Благодарю.

1 ответ1

0

Проблема, вероятно, в том, что nc является двусторонним соединением, но popen() использует только один путь. Когда удаленный сервер пытается прочитать данные из соединения, nc будет читать из его стандартного ввода, который вы не устанавливаете, поэтому он, вероятно, получает 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()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .