如何使用python获取wlan设备名称



在使用python的linux系统中,我只想要wlan设备名称。我可以通过shell脚本获得设备名称:

echo /sys/class/net/*/wireless | awk -F'/' '{ print $5 }'

所以我想在python上使用subprocess

import shlex
import subprocess
def main():
echo = shlex.split('echo /sys/class/net/*/wireless')
echo_proc = subprocess.Popen(echo, shell=True, stdout=subprocess.PIPE)
awk = shlex.split("awk -F'/' '{ print $5 }'")
awk_proc = subprocess.Popen(awk, stdin=echo_proc.stdout)
print(awk_proc.stdout)

但我只得到None作为输出。如果可能的话,我更喜欢subprocess.run()的解决方案。所以我用run替换了Popen。但随后我收到错误消息AttributeError: 'bytes' object has no attribute 'fileno'

通过shell进行的类型glob和路径名扩展将是一个令人头疼的问题
在我的环境中,以下片段有效:

import subprocess
subprocess.run('echo /sys/class/net/*/wireless', shell=True)

但以下返回一个空字符串:

import subprocess
subprocess.run(['echo', '/sys/class/net/*/wireless'], shell=True)

然后请尝试以下作为起点:

import subprocess
subprocess.run('echo /sys/class/net/*/wireless | awk -F"/" "{ print $5 }"', shell=True)

这将带来您想要的输出。

[更新]如果你想给上面的输出分配一个变量,请尝试:

import subprocess
proc = subprocess.run('echo /sys/class/net/*/wireless | awk -F"/" "{ print $5 }"', shell=True, stdout = subprocess.PIPE)
wlan = proc.stdout.decode("utf8").rstrip("n")
print(wlan)

顺便说一句,如果你不坚持subprocess模块,为什么不采用原生方式呢:

import glob
list = glob.glob('/sys/class/net/*/wireless')
for elm in list:
print(elm.split('/')[4])

希望这能有所帮助。

最新更新