我試圖找到信號電平的值只是因為我想通過dBm.
我正在使用此命令查看信號電平(我想使用 python 獲取它):
$ iw dev wlx88366cfd0226 link
Connected to c4:41:1e:e5:86:f6 (on wlx88366cfd0226)
SSID: Hlab_linksys
freq: 5785
signal: -22 dBm
tx bitrate: 867.0 MBit/s
完整代碼是:
import subprocess
import time
import argparse
parser = argparse.ArgumentParser(description='Display WLAN signal strength.')
parser.add_argument(dest='interface', nargs='?', default='wlx88366cfd0226',
help='wlan interface (default: wlx88366cfd0226)')
args = parser.parse_args()
print '\n---Press CTRL Z or CTRL C to stop.---\n'
while True:
cmd = subprocess.Popen('iwconfig %s' % args.interface, shell=True,
stdout=subprocess.PIPE)
# print "cmd.stdout",cmd.stdout
for line in cmd.stdout:
if 'Link Quality' in line:
# print"s"
print (line.lstrip(' ')),
elif 'Not-Associated' in line:
print 'No signal'
time.sleep(1)
輸出的型別是字串資料流為:
Link Quality=85/100 Signal level=78/100 Noise level=0/100
我只想得到 78/100 才能轉換為 dBm。
原始代碼來自這里
就我而言,當我使用此命令時,請參見此處:iwconfig
wlx88366cfd0226 IEEE 802.11AC ESSID:"Hlab_linksys" Nickname:"<WIFI@REALTEK>"
Mode:Managed Frequency:5.785 GHz Access Point: C4:41:1E:E5:86:F6
Bit Rate:867 Mb/s Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off
Power Management:off
Link Quality=84/100 Signal level=78/100 Noise level=0/100
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
enp3s0 no wireless extensions.
lo no wireless extensions.
所以,我wlx88366cfd0226在代碼中使用。
更新
如何僅獲取信號的值:
這是我的代碼:
import subprocess
import time
import argparse
parser = argparse.ArgumentParser(description='Display WLAN signal strength.')
parser.add_argument(dest='interface', nargs='?', default='wlx88366cfd0226',
help='wlan interface (default: wlx88366cfd0226)')
args = parser.parse_args()
print '\n---Press CTRL Z or CTRL C to stop.---\n'
while True:
cmd = subprocess.Popen('iw dev %s link' % args.interface, shell=True,
stdout=subprocess.PIPE)
# print "cmd.stdout",cmd.stdout
for line in cmd.stdout:
if 'signal' in line:
# print"s"
print (line.lstrip(' ')),
elif 'Not-Associated' in line:
print 'No signal'
time.sleep(1)
這里的輸出是:
signal: -23 dBm
signal: -23 dBm
signal: -23 dBm
signal: -23 dBm
signal: -23 dBm
signal: -23 dBm
signal: -23 dBm
signal: -23 dBm
我需要它作為在下一個方程中使用的數字。
uj5u.com熱心網友回復:
拆分方式:
line.split(" ")[1].split('=')[1]
閱讀它:我們走這條線。將其分成 2 個空格。這為我們提供了 3 個部分(“鏈接質量”、“信號電平”和“噪聲電平”),然后我們訪問第二個元素,第一個元素[1]為我們提供“信號電平 = 78/100”。然后我們把它吐出來=給我們['Signal level', '78/100'],我們最終用第二個元素訪問第二個元素,[1]我們得到了我們想要的。
或者,如果字串操作更符合您的口味:
level = line[line.find("Signal level=") 13:line.find(" ", line.find("Signal level=") 13)]
閱讀它:我們采用我們知道的具有我們想要的值的行,并Signal level=在該字串中找到。find回傳字串中匹配的第一個字符的索引,因此我們必須添加 13( 中的字符數Signal level=)才能將其添加到Signal level=. 然后我們必須在您要查找的內容之后找到空間。我們通過查找 13 之后的第一個字符來實作Signal level=。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/361760.html
