首页 > 解决方案 > 将多个命令写入子进程

问题描述

我正在尝试编写蓝牙连接到需要与 Linux 机器配对 PIN 的设备的脚本。没有一个pygattpybluez可以处理 PIN 输入。我发现子流程将是正确的解决方案!然而,问题是配对蓝牙设备需要顺序命令和分析输出,所以我不能只从 Python 运行命令。

到目前为止我能做的:

from subprocess import Popen, PIPE

p = Popen(['bluetoothctl'], stdin=PIPE, stdout=PIPE, bufsize=1)
p.stdin.write(b'agent') # First command in my procedurebluetoothctl
p.stdin.close()
for line in iter(p.stdout.readline, b''):
    print line,
p.stdout.close()
p.wait()

这工作得很好!它提示我,如果我在终端中运行“代理”,agent registered我会得到什么。bluetoothctl

但是,我想继续写这个过程,例如“扫描”开始扫描设备或“设备”列出可用设备。据我所知,这是不可能的,因为我的代码是写的。发送命令后,桥将关闭,如果我尝试这样做:

 p.stdin.write(b'devices')

我会得到一个错误writing to closed file

我的问题:使用此子流程继续发送和阅读的正确方法是什么?还是合适的替代品?我已经阅读过subprocess.communicate()但没有得到任何改进,它还是关闭了。

我也读过pexpect但我不知道如何使用它来解决我的问题。

标签: pythonbluetoothsubprocess

解决方案


推荐阅读