3

要求:我需要连接到远程蓝牙设备和端口并使用设备文件发送数据。1.首先扫描最近的蓝牙设备 2.连接到远程BT地址和频道并使用设备文件(/dev/rfcomm0)进行通信

我被困在第二步了。我可以通过 linux shell 做到这一点

sudo rfcomm connect /dev/rfcomm0 00:11:22:33:44:55 1 &

这可行,然后我打开我的 python 解释器并使用 rfcomm0 设备文件与远程设备通信。

但我的要求是设备地址可能会发生变化。所以我想通过python程序连接和释放连接。

我尝试使用 python 子进程。但问题是它立即返回返回码 0,然后在一定延迟后建立连接。

import subprocess
host = '00:11:22:33:44:55'
port = "1"
subprocess.call(["rfcomm connect",host,port,"&"],shell=True)

我正在寻找是否有任何 pyBluez 或任何其他 python 替代品来实现这一目标。

4

2 回答 2

1
import subprocess

host = input()
port = 1

cmd = "sudo rfcomm connect /dev/rfcomm0 {} {} &".format(host, port)
conn = subprocess.Popen(cmd, shell=True)
if conn.returncode is None:
    print("error in opening connection")

导入子流程模块

从用户(主机)读取蓝牙地址

端口号也可以读作输入,我在考虑默认端口1

cmd = "sudo rfcomm connect /dev/rfcomm0 {} {} &".format(host, port) 将从给定的参数创建一个命令

执行命令后有多种读取输出和错误的方法。阅读更多关于 Popen@ https://docs.python.org/3/library/subprocess.html

于 2020-01-10T15:09:26.260 回答
0

您可以使用 os 模块来运行 Shell 命令。您可以像这样存储返回值:

from os import system
Returnedstring = system("Shell command")
于 2016-06-07T15:56:38.857 回答