【发布时间】:2017-09-03 12:20:39
【问题描述】:
我正在为我 3 岁的孩子做一个很酷的小项目。这是一个带有电话听筒的小盒子,他可以在里面按“爸爸”按钮或“妈妈”按钮走上去。然后它会呼叫我们的一部手机。
我曾经是 SW 开发人员,但从不使用 Linux,并且不熟悉 Bash 脚本。在盒子的引擎盖下是一个运行 IncrediblePBX 并连接到谷歌语音号码的树莓派。我正在使用 GPIO 命令连接到按钮的 GPIO 引脚。我的脚本只是一个连续的 while 循环检查 GPIO 输入,一旦它检测到输入,就会尝试调用。
对于 SIP 客户端,我使用的是命令行 SIP 客户端 linphonec。它非常适合拨打电话。启动后,您将进入 linphonec 命令提示符“linphonec>”,您只需“调用 xxxyyyzzzz”即可。
现在我正在尝试将 linphonec 控件放入 bash 脚本中,但遇到了一些问题。对于初学者,我目前正在尝试在 bash 脚本中使用嵌入式 Expect 脚本来监听和响应 linphonec 提示。我还没有让它工作,但最终应该让它工作。但我现在遇到的更大问题是,如果我在这个期望脚本中,如何继续监视 GPIO(bash 脚本中的循环)?如果我退出 Expect 脚本,是否可以跳回 linphonec CLI 使用“Terminate”终止呼叫(如果手机放在底座上)?我应该在单独的控制台 Windows 中运行 linphonec 并通过替代方法进行交互吗?我可以使用“&”在后台运行它并仍然向它发送命令吗?
【问题讨论】:
-
(1) 我不建议将
expect作为工作的正确工具。 (2) 但是,如果您想在后台运行它(或其他任何东西),同时能够写入其标准输入并从其标准输出读取,这是coprocess 的工作。 -
...不过,确实不乏用于 Python 或其他更高级别语言的 SIP 库(而且由于您建议使用 TCL 解释器来运行
expect,这是一个 Python解释器是同一类开销)。 -
也就是说,上面是评论而不是答案的原因是坦率地说,我不确定这个问题是否适合当前询问的网站。如果您只关注一个问题(“我可以在后台运行命令并仍然向它发送命令吗?”),并包含一些代码来演示您正在尝试做什么(理想情况下,minimal reproducible example),那将更适合。