python - 如何从字符串中获取项目的值?

标签 python string ubuntu wifi rssi

我试图找到 的值信号电平只是因为我想通过 dBm 测量 wifi 信号.
我正在使用 this命令查看信号级别(我想使用 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。
原码来自 here
就我而言,当我使用此命令时,请参阅 here : 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
我需要它作为一个数字在下一个方程中使用。

最佳答案

拆分方式:

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)]
阅读它:我们采用我们知 Prop 有我们想要的值的线,我们找到Signal level=在那个字符串中。 find返回字符串中匹配的第一个字符的索引,因此我们必须添加 13(Signal level= 中的字符数)才能使其到达 Signal level= 的末尾.然后我们必须在您要查找的内容之后找到空间。我们通过寻找第一个 来做到这一点Signal level= 之后的字符+13。

关于python - 如何从字符串中获取项目的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70034948/

相关文章:

ruby - Shotgun 上的 Sinatra 和 Ruby 1.9.2 问题

python - 随机拆分一个numpy数组

string - 在 Julia 中剪切文件

Python OpenCV : Getting Stats out of Hough Circle Detection

ios - ObjectiveC 与 iOS 中对 %d 的不同处理

c - strncpy 和 strcat 用法

java - 如何运行包含 .jar 文件的 java 程序

reactjs - node-sass-chokidar 没有安装在 npm install 上

python - 在 google-cloud-ml 作业中加载 numpy 数组

python - ggpy : TypeError: unorderable types: float() > NoneType()