2017-01-13 129 views
1

我有2个树莓派设备值。首先是测量温度,第二个是显示它。我写了一些python脚本来管理发送温度结果。无法读取python脚本输出

服务器脚本:

import RPi.GPIO as GPIO 
import dht11 
import time 
import datetime 
import sys 
# initialize GPIO 
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BCM) 
GPIO.cleanup() 

# read data using pin 17 
instance = dht11.DHT11(pin=17) 

result = instance.read() 

out = str(result.temperature) + " " + str(result.humidity) 

sys.stdout.write(out) 
sys.stdout.flush() 
sys.exit(0) 

客户端脚本

#!/usr/bin/python 
import math 
import time 
import os 
import Adafruit_CharLCD as LCD 
# Initialize the LCD using the pins 
lcd = LCD.Adafruit_CharLCDPlate() 

lcd.set_color(1.0, 1.0, 1.0) 
lcd.clear() 
ws_dht11 = "" 
while True: 
     ws_dht11 = str(os.system('ssh [email protected] \'python ~/Apps/DHT11_Python/dht11_ssh_read.py\'')) 
     if ws_dht11<>'0 0': 
       break; 
print 'F' 
print ws_dht11 

问题是与ws_dht11变量。它似乎没有收到任何价值,而不是此服务器脚本正在打印结果。我该如何修复它?

+0

是什么如果ws_dht11 <>'0 0':'。那是甚至有效的Python吗? – Tagc

+0

@Tagc这是相同的SQL <> - 这是同义太=,并且是的,它是有效的Python –

+0

我绿色的蟒蛇,我已经大多采用C++,到目前为止,所以可能有一些共同的东西! – tyrtyrtyrtyr

回答

0

使用os.system返回你跑的过程中,它会在这种情况下为0的退出代码(我假设SSH甚至通过返回代码回来了,这是不一定的情况下)。我认为你正在寻找的是os.popen(),它执行一个命令并允许你将它的输出读到标准输出。
这是一个很肤浅的答案,我怀疑这是实现沟通的一种非常奇怪的方式,但我只是回答您的具体问题W/O型思维。

+1

不要么使用os.popen,使用子 –

+0

刚刚已经尝试过了,要么不工作或我不知道如何使用它 – tyrtyrtyrtyr

+0

如果你的问题是“它不工作,或者我不知道如何使用它”,答案是“让它工作或学习如何使用它”。 –

0

只运行一个过程,然后返回该进程退出代码。

一个更好的解决办法是有一个监听套接字的主机之间进行通信,或者使用某种类型的HTTP API,比如REST或XML的,获取从主机A的价值和主机B

+0

我想过这个,但它似乎太复杂了。如果实际解决方案失败,我会尝试生成输出文件,通过sftp下载并读取它。 – tyrtyrtyrtyr

+0

@tyrtyrtyrtyr我会推荐阅读基本的服务器/客户端套接字通信https://pymotw.com/2/socket/tcp.html - 如果你得到这个太工作,那么你可以让PI与任何你想要的数据进行通信。 –