我很难找到标题的题目,但它可能不是最好的描述。但是下面我将详细解释我的情况。如果有任何建议,我可以很高兴地编辑标题。
我现在有两个Raspberry Pi。以后会有更多。 Pi A是运行代码并收集温度值的主机。 Pi B就是在那里运行传感器并收集温度和湿度值。
我试图在Pi A中使用每个脚本,并使用ssh在其他计算机上远程运行它们。
我正在尝试新事物,所以我将输入两个我现在正在使用的简单代码。
第一个脚本是af.py。它存储在Pi A中,但将在Pi B中运行。
#!/usr/bin/env python
import Adafruit_DHT as dht
h, t = dht.read_retry(dht.DHT22, 4)
print('{0:0.1f} {1:0.1f}'.format(t, h))
输出为:
pi@raspberrypi:~/Temp_Codes $ python af.py
26.1 22.7
pi@raspberrypi:~/Temp_Codes $
第二个是afvar.py。在此脚本中,我使Pi B运行af.py,但问题是,我希望能够直接获取Pi B的值或传感器的输出,以便可以在afvar.py中继续使用它们。>
#!/usr/bin/env python
import subprocess
#Here I am trying to get the temperature and humidity value inside these two variables t2 and h2
t2, h2 = subprocess.check_output("sshpass -p 'x' ssh pi@192.168.x.x python < /home/pi/tempLog/af.py", shell = True)
#Some other stuff using t2 and h2 .....
#like print "temp is %f and hum is %f" % (t2, h2)
此刻,它给了我这样的错误:
Traceback (most recent call last):
File "afvar.py", line 16, in <module>
t2, h2 = subprocess.check_output("sshpass -p 'x' ssh pi@192.168.x.x python < /home/pi/tempLog/af.py", shell = True)
ValueError: too many values to unpack
我想做的是可能的吗?我一直在检查互联网并尝试了不同的解决方案,但这是我目前遇到的问题。
答案 0 :(得分:1)
subprocess.check_output
返回bytes
。
您想在此处拆分的内容可能是您的输出'{0:0.1f} {1:0.1f}'.format(t, h)
因此,您首先必须将bytes
解码为str
(并可能从尾随换行符中删除它),然后将其拆分。
output = subprocess.check_output("sshpass -p 'x' ssh pi@192.168.x.x python < /home/pi/tempLog/af.py", shell = True)
output = output.decode().strip()
t2, h2 = output.split()
由于您可能希望温度和湿度浮动,因此请最终解析它们:
t2, h2 = float(t2), float(h2)