python - 将多个命令写入子进程
问题描述
我正在尝试编写蓝牙连接到需要与 Linux 机器配对 PIN 的设备的脚本。没有一个pygatt
或pybluez
可以处理 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
但我不知道如何使用它来解决我的问题。
解决方案
推荐阅读
- php - “登录”脚本混乱情况下的 SQL 查询问题
- tensorflow-serving - 使用 NMT 进行 TF 服务
- nltk - 如何修复python中的nltk stanford导入错误
- linux - 在日志文件中找到某个字符串时停止 Tail
- java - 如何在java中处理更改的方法签名
- c# - 从搜索引擎中排除 Oracle 网站?
- javascript - JSON.parse 不返回原始对象
- owasp - OWASP 4.0.2 dependency-check-gradle 插件不可用
- acumatica - 屏幕出现多个错误
- node.js - 使用 nodemailer 时延迟发送电子邮件