我正在尝试建立与通过以太网连接到主raspberrypi的raspberrypi(在代码中称为从属)的连接。从属树莓派也有一个静态IP地址。
以下代码(即我正在执行的全部代码)尝试从主raspberrypi连接到从属raspberrypi,并发出“ echo hello”命令。据我所知,从站已连接到屏幕,据我所知,应在终端上打印“ hello”一词。
import paramiko
import time
slave_ip='169.254.39.236'
def connect():
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
connect(slave_ip, username='pi', password='raspberry')
ssh_stdin, ssh_stdout, ssh_stderr = ssh_client.exec_command('echo hello')
exit_status = ssh_stdout.channel.recv_exit_status()
print (exit_status)
def main():
connect()
if __name__ == '__main__':
while True:
try:
main()
except:
pass
问题:
1-如何确定登录是否成功?我之所以这样问是因为,如果我提供了错误的登录信息或IP,该脚本不会崩溃或返回错误。
2-假设登录成功,为什么我看不到命令的输出?
答案 0 :(得分:0)
您不会看到错误,因为您正在捕获try
语句中的所有内容,这是错误的做法,您应该仅捕获要处理的异常
您的循环将永远重复执行一次,您不希望这样做,而只知道运行一次就可以运行一次,对脚本执行更多有用的操作
您没有连接,是因为您递归调用了您定义的connect函数,而是调用了ssh_client.connect()
您不会在RPi的连接显示中看到任何输出,这是因为ssh创建了一个独立的会话,如果您想在连接显示中看到输出,请尝试使用wall
linux命令,或者只需运行将向stdout输出一些文本并从python打印出来的命令
修改后的脚本如下:
import paramiko
import time
slave_ip='169.254.39.236'
def connect():
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(slave_ip, username='pi', password='raspberry')
ssh_stdin, ssh_stdout, ssh_stderr = ssh_client.exec_command('echo hello')
exit_status = ssh_stdout.channel.recv_exit_status()
print(ssh_stdout)
if __name__ == '__main__':
connect()