13 使用 Python 开发 Shell

与上一节介绍的开发 Shell 类似,也可以启动交互式 Python 开发 Shell 并在其中 工作。调试某些命令,甚至只是编辑软件包时,pydevshell 都很有用。调用 pydevshell 任务时,会为指定目标运行截至 do_patch (含该 任务)的所有任务,随后打开新终端。关键 Python 对象和代码也可像在 BitBake 任务中一样使用,尤其是数据存储对象 'd'。因此,以下命令可用于探索数据存储 并运行函数:

pydevshell> d.getVar("STAGING_DIR")
'/media/build1/bitbake-builds/build/tmp/sysroots'
pydevshell> d.getVar("STAGING_DIR", False)
'${TMPDIR}/sysroots'
pydevshell> d.setVar("FOO", "bar")
pydevshell> d.getVar("FOO")
'bar'
pydevshell> d.delVar("FOO")
pydevshell> d.getVar("FOO")
pydevshell> bb.build.exec_func("do_unpack", d)
pydevshell>

可用函数的详情见 BitBake 用户手册的 “Functions You Can Call From Within Python” 一节。

这些命令的执行效果与 OpenEmbedded 构建系统执行时相同。因此,这种工作方式 有助于调试构建,或准备将要使用 OpenEmbedded 构建系统构建的软件。

以下示例为名为 matchbox-desktop 的目标启动 pydevshell:

$ bitbake matchbox-desktop -c pydevshell

此命令启动终端,并在 OpenEmbedded 构建环境中进入交互式 Python 解释器。 OE_TERMINAL 变量控制打开的 Shell 类型。

使用完 pydevshell 后,可按 Ctrl+d 退出 Shell,也可以关闭终端窗口。