繁体   English   中英

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

[英]How to get wlan device name with python?

我只想要具有 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 output。 如果可能的话,我更喜欢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)

这将带来您想要的 output。

[更新] 如果要给上面的 output 赋值变量,请尝试:

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模块,为什么不使用本机方式 go :

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM