lager python 脚本运行到一半时暂停它,检查实验台,然后从脚本停下的地方继续。您可以用临时的 lager 命令检查,也可以用实时的 Python 提示符检查。当一个长时间的测试走到已知的问题点时,这很有用;当您必须检查一台处于未知状态的设备、又不想中止并重新运行时,它同样有用。
自 lager 0.21.0 起提供。
导入
pause(label=None, *, timeout=None, interactive=False)
在调用处阻塞脚本,直到它被恢复(或超时)。
pause() 无法暂停时,它是一个安全的空操作 —— 即脚本不是在 lager python
下运行(没有断点上下文),或者断点被禁用时。它永远不会抛出异常。
恢复运行
被暂停的脚本可以用三种方式恢复:- 按回车键,在运行该脚本的终端中(前台的
lager python会话)。 lager python --continue <id> --box <box>—— 可以在任意终端、任意位置执行。请使用横幅中的id。脚本已分离,或者您已经在另一个终端里时,这很方便。- 自动恢复 —— 超时(默认 300 秒)之后脚本自行继续,并记录它这样做了。这样,无人值守或被遗忘的断点就不会把整个运行挂住。
控制自动恢复的超时时间
默认是 300 秒。您可以按断点、按运行来覆盖它,也可以完全禁用:timeout= 参数 → LAGER_BREAKPOINT_TIMEOUT 环境变量 → 300 秒默认值,因此脚本中显式写出的 timeout= 优先于环境变量。
lager python --timeout 是另一项设置。它是脚本的总运行时间上限,Box 把它限制在 300 秒以内。无论脚本是否处于暂停状态,它到时都会终止整个运行。使用较长的断点暂停时,请让它保持默认值(0,不限时)。交互式控制台
使用pause(interactive=True) 时,断点还会打开一个运行在被暂停脚本进程内部的
Python 控制台,并预置暂停时处于作用域中的变量:
Ctrl+D 断开连接(脚本仍然保持暂停)。
该控制台用于检查。它操作的是脚本命名空间的一个快照。您在控制台中所做的更改不会在脚本恢复时带回脚本中。
暂停期间检查硬件
由于被暂停的脚本不持有 Box 级别的锁,您可以在它等待期间,从另一个终端对实验台运行普通的lager 命令:
- 脚本自己已打开的设备,由被暂停的进程占用。 从第二个终端读取它会返回
“device busy / claimed by another process” 错误。请改用
--console读取 —— 它运行在同一进程中,共享已打开的句柄。 - 每个进程、每台物理仪器只能有一个 Net。 同一台仪器上的两个 Net
不能在一个脚本中同时打开。例如同一台 Rigol DP821 的两个通道
supply2/supply3,以及双角色的 Keithley 2281S 的supply1/battery1。请从不同的终端读取,或者一次读一个。
内置的 breakpoint()
在 lager python 脚本中调用 Python 内置的 breakpoint(),会触发与 lager.pause() 相同的交互式暂停:
禁用断点
把LAGER_BREAKPOINTS 设为表示关闭的值。此后每个 pause() 和 breakpoint()
调用都会变成空操作,这样一个仍然包含断点的脚本就能干净地非交互运行:
off、0、false 或 no(不区分大小写)。
完整示例
test.py:
lager python --continue 7f3a…e9 --box mybox),脚本随即完成:

