Python脚本在IDLE中运行但不在终端中运行

时间:2017-05-03 17:14:06

标签: python mqtt gpio

此处存在此问题的许多实例,但在尝试运行脚本时,所有这些实例都列出了错误。当我尝试从终端运行我的脚本时,它认为大约一秒钟,然后回到正常的终端提示(没有错误消息)。

我是Python的新手,所以请原谅我,如果我只是做错了什么,而是为了我的生活。 。 。在IDLE中打开/运行时运行完全正常。

import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
import RPi.GPIO as GPIO

RELAY_PIN_1 = 23
RELAY_PIN_2 = 24

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(RELAY_PIN_1, GPIO.OUT, initial=GPIO.HIGH)
GPIO.setup(RELAY_PIN_2, GPIO.OUT, initial=GPIO.HIGH)

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))

    client.subscribe("/amber/1/1")
    client.subscribe("/amber/1/2")

def on_message(client, userdata, msg):
    if msg.topic == "/amber/1/1":
        if msg.payload == b'ON':
            GPIO.output(RELAY_PIN_1, GPIO.LOW)
        elif msg.payload == b'OFF':
            GPIO.output(RELAY_PIN_1, GPIO.HIGH)

    if msg.topic == "/amber/1/2":
        if msg.payload == b'ON':
            GPIO.output(RELAY_PIN_2, GPIO.LOW)
        elif msg.payload == b'OFF':
            GPIO.output(RELAY_PIN_2, GPIO.HIGH)

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("10.0.0.163", 1883, 60)

client.loop_start()

如果有人想知道,我一直在尝试使用python mqtt.py命令运行它(mqtt.py是文件名)。另外,我在IDLE和终端都使用Python2.7。

1 个答案:

答案 0 :(得分:1)

当您调用loop_start()时,您在另一个线程上启动客户端,但在此之后脚本结束并且该过程终止,因此没有任何反应。

如果您希望客户端继续运行,sleep()之后主线程中的loop_start(),或者调用loop_forever(),它将在当前线程中循环,因此您的脚本不会终止。

请参阅documentation

中的网络循环部分