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 に答える