介绍 MicroPython 交互式解释器模式(read-eval-print-loop, 以下简称 REPL)的一些特性。可以使用 Thonny 图型介面或是 esptool 所提供的 mpremote 远程调适工具来运行。
当输入以冒号结尾的 python 语句时(例如 if、for、while),提示将变为三个点 (…),光标将缩进 4 个空格。当您按下回车键时,下一行将继续使用与常规语句相同的缩进级别或适当的额外缩进级别。如果按退格键,则会撤消一级缩进。
如果您的光标一直回到开头,按 RETURN 将执行您输入的代码。下面显示了您在输入 for 语句后会看到的内容(下划线显示光标所在的位置),分别以命令列模式(mpremote)与图型模式(Thonny)显示:(注意:命令列模式与图型模式无法同时使用,因为端口属于独占模式,无法同时提供给两个应用程序存取)
>>> for i in range(30):
... _
图 1. 命令列模式(mpremote)与图型模式(Thonny)的自动缩进
参考代码
for i in range(30):
if i > 3:
break
print(i)
输出结果为:
0
1
2
3
在 REPL 中键入命令时,如果到目前为止键入的行对应于某些名称的开头,则按 TAB 键将显示可以输入的可能内容。例如,首先通过输入并按 RETURN 键来导入 machine 模块。然后键入 machine. 并按 TAB 键,它会显示 machine 模块内的所有方法与属性,可以输入部分字符后再按 TAB 键就可以自动完成输入。(注意:在 Thonny 中无法自动完成)
可以通过按 Ctrl-C 来中断正在运行的程序。这将引发一个 KeyboardInterrupt,它将带你回到 REPL,前提是你的程序不拦截 KeyboardInterrupt 异常。
如果想将一些代码粘贴到终端窗口中,自动缩进功能会将事情搞砸。例如,将以下 MicroPython 代码粘贴到普通 REPL 中。
def foo():
print('This is a test to show paste mode')
print('Here is a second line')
foo()
然后将看到如下内容:
>>> def foo():
... print('This is a test to show paste mode')
... print('Here is a second line')
... foo()
...
Traceback (most recent call last):
File "", line 4
SyntaxError: invalid syntax
如果您按 Ctrl-E,那么您将进入粘贴模式,这实际上会关闭自动缩进功能,并将提示从 更改>>>为 ===。例如:
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== def foo():
=== print('This is a test to show paste mode')
=== print('Here is a second line')
=== foo()
===
This is a test to show paste mode
Here is a second line
>>>
粘贴模式允许粘贴空白行。粘贴的文本像文件一样被编译。按 Ctrl-D 退出粘贴模式并启动编译。
软重置将重置 python 解释器,但不会尝试重置您连接到 MicroPython 板(USB 串行或 Wifi)的方法。可以通过按 Ctrl-D 从 REPL 执行软重置,或者通过执行以下命令从 Python 代码执行:
machine.soft_reset()
现在创建一些变量并重复 dir() 命令:
i = 1
j = 23
x = 'abc'
dir()
['j', 'x', '__name__', 'pyb', 'i']
现在,输入 Ctrl-D,并重复 dir() 命令,将看到先前的变量不再存在:
MPY: soft reboot
MicroPython v1.19.1 on 2022-06-18; ESP32 module with ESP32
Type "help()" for more information.
>>> dir()
['uos', 'gc', '__name__', 'bdev']