如何在Raspberry Pi Pico的main.py中运行子脚本且不返回主脚本?
解决Raspberry Pi Pico运行子脚本后停留在子脚本的问题
当你通过导入函数的方式调用子脚本时,函数执行完毕后自然会回到main.py的调用位置,这是Python的默认行为。要实现运行子脚本后停留在子脚本直到重启的需求,你可以用以下两种方式:
方法1:用exec()直接执行子脚本内容并锁定主线程
这种方式会直接把子脚本的所有代码加载到当前执行环境中运行,之后通过无限循环阻止程序回到main.py的后续逻辑。
main.py 代码示例
# 假设variable1是你的引脚或变量对象 from machine import Pin variable1 = Pin(2, Pin.IN, Pin.PULL_UP) if variable1.value() == 1: # 读取并执行子脚本的全部内容 with open("sisterScript.py", "r") as f: exec(f.read()) # 如果子脚本没有内置无限循环,添加以下代码锁定程序 while True: pass # 下面的代码只有在条件不满足时才会执行 print("条件不满足,正常运行main.py")
sisterScript.py 建议写法
如果子脚本本身包含持续运行的逻辑(比如传感器读取、外设控制的循环),可以直接写逻辑,不需要额外套函数:
from machine import Pin, LED import time # 子脚本的主逻辑,无限循环运行 led = LED("LED") while True: led.toggle() time.sleep(0.5)
方法2:让子脚本的主函数持续运行不返回
把你的子脚本封装成一个不会结束的主函数,调用后就一直停在这个函数里。
sisterScript.py 代码示例
from machine import Pin, LED import time def run(): led = LED("LED") # 用无限循环让函数一直运行,不会返回 while True: led.toggle() time.sleep(0.5)
main.py 调用示例
from machine import Pin import sisterScript variable1 = Pin(2, Pin.IN, Pin.PULL_UP) if variable1.value() == 1: # 调用子脚本的run函数,该函数不会返回 sisterScript.run() # 条件不满足时执行后续逻辑 print("条件不满足,执行main.py后续代码")
关键说明
- 两种方法的核心都是让程序进入一个不会结束的执行流程,要么是子脚本自身的无限循环,要么是main.py在执行子脚本后添加无限循环,这样就不会回到main.py的后续代码。
- 如果你的子脚本不需要持续运行,只是执行一次性任务后停住,可以在子脚本末尾添加
while True: pass,同样能达到锁定程序的效果。
内容的提问来源于stack exchange,提问作者Joshua Stringer music
相关产品推荐
相关产品推荐

