Python check_output无法正常工作

时间:2015-03-01 00:15:41

标签: python raspberry-pi

我有一个shell脚本,它执行一个带有传递给它的arg的C二进制文件。当我手动运行shell脚本时,每次都按预期工作。

当我尝试通过check_output进行此操作时,有时它会起作用,但大部分时间都会失败并产生奇怪的结果。

运行check_output

的python
#! /usr/bin/env python
import subprocess

def getWaterTemp():
    return 4.06

def getPH():
    temp=getWaterTemp()
    ph = subprocess.check_output(["./getPH.sh", str(temp)])
    ph = float(ph[1:5])
    if ph>0.0:
        return ph

if __name__ == '__main__':
    print getPH()

getPH.sh

#!/bin/sh
ph=$(/home/pi/GrowControlBox/phtempset1.1 T,$1)
echo "$ph"

当我运行shell脚本时,它会返回一个值:

"'8.66'"

当我运行python时,有时会返回值,有时会返回:

ValueError: could not convert string to float: ?▒▒▒

此外,每次运行python时,它都会返回一个值,但不会设置传感器的温度。 (这发生在C二进制文件中)有时候,我必须多次运行才能设置传递的温度。但是在运行shell脚本时,它会设置temp,然后返回 期望值,每一次。

这是运行python时遇到的另一个随机错误:

Traceback (most recent call last):
  File "./GrowControlBox.py", line 42, in <module>
    print getPH()
  File "./GrowControlBox.py", line 36, in getPH
    ph = float(ph[1:5])
ValueError: could not convert string to float:

证明shell脚本独立工作,以及不同的C二进制文件,以检查从先前的shell脚本运行中是否正确设置了temp:

pi@jslayrpi ~/GrowControlBox $ ./getPH.sh 17.0
8.697
pi@jslayrpi ~/GrowControlBox $ ./getPH.sh 2.5
8.788
pi@jslayrpi ~/GrowControlBox $ ./getPH.sh 6.8
8.758
pi@jslayrpi ~/GrowControlBox $ ./getPH.sh 9.1
8.746
pi@jslayrpi ~/GrowControlBox $ ~/phtemp t
t
Reading: 1
Reading: 63
Reading: 84
Reading: 172
Reading: 57
Reading: 46
Reading: 48
Reading: 57
Reading: 0
Reading: 0
?T▒9.09
Status: 1
Reading: 1
Reading: 56
Reading: 46
Reading: 55
Reading: 52
Reading: 52
Reading: 0
Reading: 0
Reading: 0
Reading: 0
8.744

1 个答案:

答案 0 :(得分:0)

您收到此错误是因为您尝试将字符串片段转换为浮点数。假设ph的格式为"'8.66'"且包含任意数量的小数位,请尝试以下操作:

#! /usr/bin/env python
import subprocess

def getWaterTemp():
    return 4.06

def getPH():
    temp = getWaterTemp()
    ph = subprocess.check_output(["./getPH.sh", str(temp)])
    ph = float(ph[1:-1]) # exclude quotations
    if ph > 0.0:
        return ph

if __name__ == '__main__':
    print(getPH())