0

我是 python 编程语言的新手,在做一些相当简单的事情(显然不是)时遇到了问题。这是代码:

# Get the list of available network interfaces
listNIC = os.system("ifconfig -s | awk '{print $1}'")
listNIC.split('\r?\n')

# Get the name of the wireless network card with iwconfig
wlanNIC = ''
i = 0
while i < len(listNIC) :
    if listNIC[i].match('eth[0-9]{1}') :
        wlanNIC = listNIC[i]
        break
    i += 1

第一个错误出现在第 3 行,因为某些奇怪的原因 listNIC 是 int 类型。错误是:

Traceback (most recent call last):
  File "Kol.py", line 9, in <module>
    listNIC.split('\r?\n')
AttributeError: 'int' object has no attribute 'split'

我通过更改解决了它:

listNIC = os.system("ifconfig -s | awk '{print $1}'")

进入

listNIC = str(os.system("ifconfig -s | awk '{print $1}'"))

但现在我遇到了一个更奇怪的问题。我收到一条错误消息,指出字符串没有属性匹配。这是错误:

Traceback (most recent call last):
  File "Kol.py", line 15, in <module>
    if listNIC[i].match('eth[0-9]{1}') :
AttributeError: 'str' object has no attribute 'match'

所以我的问题如下:

  • 如何解决 AttributeErrors 以及它们来自哪里?

提前致谢 !

4

1 回答 1

5

os.system返回命令的退出代码,而不是其输出。你把这个数字变成一个字符串,但这不会做你想做的事。它也已被弃用。您可能想查看该subprocess模块。

output = subprocess.check_output('command', shell=True)

此外,您需要使用模块进行匹配re。检查其文档以获取精确的语法,但它应该类似于re.match(your_pattern, yourstring).

最后,虽然您的版本没有错,但更常见的是循环遍历下面示例中的列表。当您保存变量并调用len. 它也被认为更pythonic。

for nic in listNIC:
    if re.match(pattern, nic):
        wlanNIC = nic
        break
于 2012-09-22T21:14:33.133 回答