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

标签 python python-3.x bash subprocess shlex

我只想要使用 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'.

最佳答案

类型 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 模块,为什么不采用 native 方式:

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

希望这有帮助。

关于python - 如何使用python获取wlan设备名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58740013/

相关文章:

linux - Bash 脚本 - 连接到远程服务器并获取结果

bash - 如何将标准输入复制到两个文件中?

java - 使用线程与Python解释器进行交互对话

python - 缺少 PyGST 插件?

python - 尝试删除文本文件中包含特定字符的行

python - 在 Ubuntu 14.04 上安装 Python 3 的 trepan 调试器

linux - Telnet 中是否有 ${SSH_CONNECTION%% *} 等价物?

python - 读取二进制文件时如何解决 EOF 错误

python - 为什么 python 和我的网络浏览器对同一链接显示不同的代码?

python - 64位Python可以连接32位MS访问驱动程序吗?