У меня есть сценарий оболочки, который выполняет двоичный код C с переданным ему аргументом. Когда я запускаю сценарий оболочки вручную, все работает так, как ожидалось, каждый раз.Python check_output не работает правильно
Когда я пытаюсь выполнить это через check_output, иногда он работает, но большую часть времени он терпит неудачу со странными результатами.
Питон, который запускает check_output
#! /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"
Когда я запускаю скрипт возвращает значение, как, например:
"'8.66'"
Когда я запустить python, иногда он возвращает значение, иногда он возвращает:
ValueError: could not convert string to float: ?▒▒▒
Также время от времени при запуске питона оно возвращает значение, но не будет устанавливать температуру для датчика. (Это происходит в двоичном файле C) Иногда мне приходится запускать его несколько раз, чтобы установить температуру, которая была передана. Но при запуске скрипта оболочки он будет устанавливать 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:
Доказательство того, что сценарий оболочки работает сама по себе, а с другой C двоичном, чтобы проверить, что темп был установлен правильно от предыдущего shell script run:
[email protected] ~/GrowControlBox $ ./getPH.sh 17.0
8.697
[email protected] ~/GrowControlBox $ ./getPH.sh 2.5
8.788
[email protected] ~/GrowControlBox $ ./getPH.sh 6.8
8.758
[email protected] ~/GrowControlBox $ ./getPH.sh 9.1
8.746
[email protected] ~/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
Вы могли бы найти [это StackExchange] (http://raspberrypi.stackexchange.com/) полезно в будущем, а также , –
Я активен там, но поскольку это действительно относится к просто python, я подумал, что лучше всего публиковать в регулярном переполнении стека – jslay
. Какова цель 'ph [1: 5]'? Что * должен * вернуть? –