如何使用 python 获取 wlan 设备名称?
How to get wlan device name with python?
我只想要 linux 系统中 python 的 wlan 设备名称。我可以通过 shell 脚本获取设备名称:
echo /sys/class/net/*/wireless | awk -F'/' '{ print }'
所以我想在 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 }'")
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'
.
类型 glob 和 shell 的路径名扩展会让人头疼。
在我的环境中,以下代码段有效:
import subprocess
subprocess.run('echo /sys/class/net/*/wireless', shell=True)
但是下面的returns是一个空串:
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])
希望对您有所帮助。
我只想要 linux 系统中 python 的 wlan 设备名称。我可以通过 shell 脚本获取设备名称:
echo /sys/class/net/*/wireless | awk -F'/' '{ print }'
所以我想在 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 }'")
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'
.
类型 glob 和 shell 的路径名扩展会让人头疼。
在我的环境中,以下代码段有效:
import subprocess
subprocess.run('echo /sys/class/net/*/wireless', shell=True)
但是下面的returns是一个空串:
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])
希望对您有所帮助。