python - Paramiko ssh linux命令执行没有结果
问题描述
我正在尝试建立与通过以太网连接到主 raspberrypi 的树莓派(在代码中命名为从属)的连接。从属树莓派也有一个静态 IP 地址。
以下代码(即我正在执行的整个代码)尝试从主 raspberrypi 连接到从属 raspberrypi,并发出“echo 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-假设登录成功,为什么我看不到命令的输出?
解决方案
您看不到错误,因为您正在捕获
try
语句中的所有内容,这是一种不好的做法,您应该只捕获要处理的异常您的循环将永远运行一遍又一遍地执行连接,您不希望这样,而是只运行一次,在您知道它正在工作之后对脚本做一些更有用的事情
您没有连接,因为您正在递归调用您定义的连接函数,而是调用
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()
推荐阅读
- amazon-web-services - 使用 Ansible 为 Linux 用户配置 AWS 密钥
- opencv - 如何在 Colab 上使用 OpenCV 和 GPU?
- vue.js - 根据值更改单元格颜色 - VueJs & Vuetify
- php - 选择连接表具有更多列出值的位置
- ibm-doors - 如何计算 DXL 跳过列表中的所有元素
- python - 确定网格中连续相同点的数量
- android - 通过基于 sql 中的其他一些 coumn 有条件地删除具有相同列值的其他记录,基于列选择唯一记录
- java - 如何在java中显示sql函数?
- python - 如何从 python 列表中删除特定元素并将这些元素添加到列表的最后?
- c++ - 如何按两列的值对cpp中的二维数组进行排序?