Answer the question
In order to leave comments, you need to log in
What am I doing wrong with proc.stdout.read()?
I want to make a bot according to this example
home-smart-home.ru/telegram-bot-raspberry-pi-signa...
created 2 files
1)t11_temp.py
#Считывание температуры из t11
import Adafruit_DHT
import time
#temp_pin = 9
#tempe = Adafruit_DHT.DHT11
#humidity, temperature = Adafruit_DHT.read_retry(tempe, temp_pin)
#time.sleep(0.3)
#cTemp = temperature
cTemp = 10
print "%.2f" %cTemp
import subprocess
from subprocess import Popen, PIPE
import sys,os
import asyncio
import telepot
import telepot.aio
from telepot.namedtuple import ReplyKeyboardMarkup, KeyboardButton, ReplyKeyboardRemove, ForceReply
from telepot.namedtuple import InlineKeyboardMarkup, InlineKeyboardButton
from telepot.namedtuple import InlineQueryResultArticle, InlineQueryResultPhoto, InputTextMessageContent
#Тут должны находиться ваши айдишники (для примера я сделал 2 разрешенных)
#Вы можете запустить бота и увидеть при нажатии меню или /start ваш личный айдишник
#Ваши разрешенные айди нужно прописать в переменных chat_allow, заменив None на айдишники
#chat_allow1=123456789
chat_allow2=987654321
# Ниже пути расположения скриптов чтения значений датчиков и управление реле.
# Каждый файл - исполняемый питоновский скрипт.
# Необходимо чтобы все файлы были представлены в системе и были исполняемыми.
file_read_temp = '/home/pi/t11_temp.py'
# считывание температуры из скрипта для t11
def temp_read():
proc = Popen(['%s' %file_read_temp], shell=True, stdout=PIPE, stderr=PIPE)
proc.wait()
t = proc.stdout.read() #здесь должно вернуться число 10 из скрипта
print (t) # но на экране вместо числа 10 появляется b''
#t = float(t)
return t
Answer the question
In order to leave comments, you need to log in
in general, my t11_temp.py looks like this
#Считывание температуры из датчика t11
import Adafruit_DHT
import time
temp_pin = 9
tempe = Adafruit_DHT.DHT11
humidity, temperature = Adafruit_DHT.read_retry(tempe, temp_pin)
time.sleep(0.3)
def temp():
t = '{0:0.1f}*'.format(temperature) #сюда записывается температура с датчика
# print "%.2f" %t
return t
def hum():
h = '{1:0.1f}%'.format(humidity) #а тут влажность
print (h)
return h
def temp_read():
import t11_temp
t = t11_temp.temp() #исполняет def temp из первого файла и присваивает возвращенную переменную t
return t
t = temp_read
blocking option py-my.ru/post/4bfb3c691d41c846bc000061
async option py-my.ru/2018/05/01/asyncio_subprocess.html
> ['%s' %file_read_temp], shell=True
1) list and shell=True, - you need to use one thing, either a list or a string + shell=True
2) the expression must be executable
3) see proc.stderr.read() what error it gives, or you can redirect stderr->stdout, it can also check that in proc.returncode
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question