如何从字符串中获取项目的值?
How to get the value of an item from the string?
我试图找到 信号电平 的值只是因为我想通过 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 spaces。这给了我们 3 个部分(“Link 质量”、“信号电平”和“噪声电平”),然后我们使用第一个 [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
returns 字符串中匹配的第一个字符的索引,因此我们必须添加 13(Signal level=
中的字符数)以使其到达 [=16= 的结尾].那么我们必须在您要查找的内容之后找到 space。我们通过查找 Signal level=
+13.
之后的第一个
字符来做到这一点
我试图找到 信号电平 的值只是因为我想通过 dBm
.
我正在使用 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 spaces。这给了我们 3 个部分(“Link 质量”、“信号电平”和“噪声电平”),然后我们使用第一个 [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
returns 字符串中匹配的第一个字符的索引,因此我们必须添加 13(Signal level=
中的字符数)以使其到达 [=16= 的结尾].那么我们必须在您要查找的内容之后找到 space。我们通过查找 Signal level=
+13.
字符来做到这一点