You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:05:39