【问题标题】:How to get wlan device name with python?如何使用 python 获取 wlan 设备名称?
【发布时间】:2020-03-03 12:27:54
【问题描述】:

我只想要带有 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'

【问题讨论】:

  • 你试过只使用 subprocess.run 吗?
  • 是的,但随后我收到错误消息AttributeError: 'bytes' object has no attribute 'fileno'。我只用 run 替换了 Popen。
  • 展示你是如何做到的。听起来你传递了错误的东西。
  • 看起来我当前的代码除了 Popen 被替换为 run
  • 我的意思是用实际代码编辑你的问题。如果某些东西不起作用,那么描述你认为重要的东西并不是一个好的技巧。如果你知道什么是重要的,你就不会问 SO。请具体详细。

标签: python python-3.x bash subprocess shlex


【解决方案1】:

类型 glob 和 shell 的路径名扩展将是一个令人头疼的问题。
在我的环境中,以下 sn-p 有效:

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

希望这会有所帮助。

【讨论】:

  • 感谢四位您的回答。但是如何获得结果表单 subprocess.run? stdout 是无。我收到了CompletedProcess
  • 如果我的脚本在终端上正确打印了所需的输出并且您想将其捕获到变量中,请尝试更新后的答案。希望它会奏效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2018-02-05
  • 1970-01-01
相关资源
最近更新 更多