获取并使用由subprocess.check_output

时间:2018-08-09 10:44:11

标签: python ssh raspberry-pi subprocess

我很难找到标题的题目,但它可能不是最好的描述。但是下面我将详细解释我的情况。如果有任何建议,我可以很高兴地编辑标题。

我现在有两个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

我想做的是可能的吗?我一直在检查互联网并尝试了不同的解决方案,但这是我目前遇到的问题。

1 个答案:

答案 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)