Python3に詳しい方に質問です。
以下コードの様にif文を使用して
(bd in res.decode())がtrueでなければelse以降に飛んで欲しいのですがtrueでなければ通らないはずのif下のres〜のところでエラー
が出ます。
(bd in〜)という条件は「hcitool con」を使用したBluetoothが接続されているかどうかという条件なのですが、接続されてない状態だとres〜の所でエラーが出るのはわかっているので、未接続ならres〜を飛ばしてelse以降に飛んでその先で接続トライさせたいです。ダメならwhileによってループしてres〜を通らずに接続トライを繰り返す様にしたいです。
true(接続)になればif下を通りres〜も通ってRSSIを表示させたいと思ってます。
なぜtrue(Bluetooth接続)でないのにelseに飛ばずif文の下を通ってしまうのか教えていただきたいです。
ご教授よろしくお願いします。
以下コードです。
#coding: utf-8 import subprocess import csv import datetime from time import sleep record_file_name = 'blt_detect.csv' bltcount = 0 try: while True: record_datetime = datetime.datetime.now() record_time = record_datetime.strftime('%Y%m%d-%X') cmd = 'hcitool con' res = subprocess.check_output(cmd.split()) print(res) bd = 'B4:8B:11:11:11:11' if(bd in res.decode()): cmd = 'hcitool rssi B4:8B:11:11:11:11' res = subprocess.check_output(cmd.split()) print(res) else: p1 = subprocess.Popen(["echo","connect",bd], stdout=subprocess.PIPE) p2 = subprocess.Popen(["bluetoothctl"], stdin=p1.stdout, stdout=subprocess.PIPE) p1.stdout.close() outs,errs = p2.communicate() print('Attempt to connect...') bltcount =0 sleep(5) except error: pass
===============================
エラー内容
line25は上記のhcitool rssiの下行のres~です。
b'Connections:\n' Attempt to connect... b'Connections:\n\t< ACL B4:8B:11:11:11:11 handle 0 state 5 lm MASTER \n' Read RSSI failed: Input/output error Traceback (most recent call last): File "car_LED2.py", line 25, in <module> res = subprocess.check_output(cmd.split()) File "/usr/lib/python3.7/subprocess.py", line 395, in check_output **kwargs).stdout File "/usr/lib/python3.7/subprocess.py", line 487, in run output=stdout, stderr=stderr) subprocess.CalledProcessError: Command '['hcitool', 'rssi', 'B4:8B:11:11:11:11']' returned non-zero exit status 1. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "car_LED2.py", line 44, in <module> except error: NameError: name 'error' is not defined
ちなみに接続時は以下のように出力されます。
pi@DMC:~ $ sudo python3 "car_LED2.py"
b'Connections:\n'
Attempt to connect...
b'Connections:\n\t< ACL B4:8B:11:11:11:11 handle 12 state 1 lm SLAVE AUTH ENCRYPT \n'
b'RSSI return value: 16\n'
b'Connections:\n\t< ACL B4:8B:11:11:11:11 handle 12 state 1 lm SLAVE AUTH ENCRYPT \n'
b'RSSI return value: 21\n'
b'Connections:\n\t< ACL B4:8B:11:11:11:11 handle 12 state 1 lm SLAVE AUTH ENCRYPT \n'
b'RSSI return value: 17\n'
b'Connections:\n\t< ACL B4:8B:11:11:11:11 handle 12 state 1 lm SLAVE AUTH ENCRYPT \n'
b'RSSI return value: 16\n'
b'Connections:\n\t< ACL B4:8B:11:11:11:11 handle 12 state 1 lm SLAVE AUTH ENCRYPT \n'
b'RSSI return value: 22\n'
b'Connections:\n\t< ACL B4:8B:11:11:11:11 handle 12 state 1 lm SLAVE AUTH ENCRYPT \n'
b'RSSI return value: 16\n'
b'Connections:\n\t< ACL B4:8B:11:11:11:11 handle 12 state 1 lm SLAVE AUTH ENCRYPT \n'
b'RSSI return value: 0\n'
接続が切れるとエラーが発生しループも止まります。
回答4件
あなたの回答
tips
プレビュー