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

我只想在带有python的linux系统上使用wlan设备名称。我可以使用Shell脚本获取设备名称:

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

所以我想在subprocess的python上使用它。

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()的解决方案。因此,我将Popen替换为run。但是然后我收到错误消息AttributeError: 'bytes' object has no attribute 'fileno'

duxinlang 回答:如何使用python获取无线设备名称?

一个glob类型和一个用shell扩展的路径名将令人头疼。
在我的环境中,以下代码段有效:

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])

希望这会有所帮助。

本文链接:https://www.f2er.com/3148310.html

大家都在问