Python 脚本 运行 在 IDLE 中但不在终端中
Python script running in IDLE but not in terminal
此处有许多此问题的实例,但所有实例都在尝试 运行 脚本时列出错误。当我尝试从终端 运行 我的脚本时,它会思考大约一秒钟,然后返回到正常的终端提示(没有错误消息)。
我是 Python 的新手,所以如果我只是做错了什么,请原谅我,但为了我的生命。 . .这 运行 在空闲 opening/running 时完全没问题。
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。
当您调用 loop_start()
时,您在另一个线程上启动了客户端,但紧接着脚本结束并且进程终止,因此没有任何反应。
如果您希望客户端保留 运行,可以在 loop_start()
之后在主线程中 sleep()
,或者调用 loop_forever()
,这将在当前线程,因此您的脚本不会终止。
请参阅 documentation 中的 网络循环 部分。
此处有许多此问题的实例,但所有实例都在尝试 运行 脚本时列出错误。当我尝试从终端 运行 我的脚本时,它会思考大约一秒钟,然后返回到正常的终端提示(没有错误消息)。
我是 Python 的新手,所以如果我只是做错了什么,请原谅我,但为了我的生命。 . .这 运行 在空闲 opening/running 时完全没问题。
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。
当您调用 loop_start()
时,您在另一个线程上启动了客户端,但紧接着脚本结束并且进程终止,因此没有任何反应。
如果您希望客户端保留 运行,可以在 loop_start()
之后在主线程中 sleep()
,或者调用 loop_forever()
,这将在当前线程,因此您的脚本不会终止。
请参阅 documentation 中的 网络循环 部分。