我对使用Python编码(以及通常的编码)还很陌生,并且在使用paramiko在SSH会话中获取要执行的命令时遇到了问题。我正在使用的代码如下:
from paramiko import SSHClient, AutoAddPolicy
import time
client = SSHClient()
client.load_host_keys('C:\ssh\id_rsa')
time.sleep(5)
client.set_missing_host_key_policy(AutoAddPolicy())
time.sleep(5)
client.connect('192.168.2.138', username='pi-star', password='******')
time.sleep(5)
with open('C:\WeatherPro\Final_Page.txt') as fnlpage:
datapage = fnlpage.read()
stdin, stdout, stderr = client.exec_command(datapage)
time.sleep(5)
client.close()
这是从Windows 10 Pro计算机到运行Pi-Star(基于raspbian \ debian的操作系统-GUI)的带有MMDVM帽子(附加火腿无线电收发器设备)的Raspberry Pi进行SSH。我使用它每10分钟将POCSAG页面发送给寻呼机。 Final_Page.txt是我使用先前的代码创建的文件,其中包含我要执行的linux终端命令。创建文本文件的原因是命令更新大约每分钟执行的信息的一部分。这是写在文本文件中的确切文本,也是linux命令需要构造的确切方式(包括引号):
sudo RemoteCommand 7642页面1246587“ T:91.2,H:42.5,BP:29.39,PA:1551,CF:1.0103,DA:2363,WG:64.93,ET:8.904”
双引号内的信息是每分钟变化的信息,是在寻呼机屏幕上显示的实际页面(这是来自赛车气象站的信息)。如果我取消了“ with open”和“ .read()”行,而改用此行代码,它将执行命令并正确发送页面:
stdin, stdout, stderr = client.exec_command('sudo RemoteCommand 7642 page 1246587 "T: 91.2, H: 42.5, BP: 29.39, PA: 1551, CF: 1.0103, DA: 2363, WG: 64.93, ET: 8.904"')
如果我尝试像原始代码中那样使用文本文件的“ with open”和“ .read()”来执行命令,则不会发生任何事情。关于如何获取经常更新的信息并使其正确执行的其他想法?
非常感谢您的帮助, 瑞安·W。
P.S。-睡眠时间只是给每个进程执行时间,因为Raspberry Pi的运行速度不是很快,并且在两者之间没有中断时会遇到麻烦。