为什么 python 在 open() 中使用"for line "时'ens'找到该行,但找不到'tun' 行



我使用以下函数来检查接口是否存在:

def status(interface):
print("Checking VPN Status...")
for line in open('/proc/net/dev'):
if interface in line:
proof = line.split(" ")[1].split()
print(proof)
return proof

这是我的/proc/net/dev文件的副本:

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
ens33: 1480355767 23538625   13    1    0     0          0         0 752613935 44655037    0    0    0     0       0          0
lo: 548140418 2567168    0    0    0     0          0         0 548140418 2567168    0    0    0     0       0          0
tun0:   17067       85     0    0    0     0          0         0   10819     114    0    0    0     0       0          0

如果我调用状态(‘ns’(,我会得到正确的输出:

['ens33:]

但如果我调用状态("un"(,我完全希望它能起作用,我会得到:

[]

知道这里发生了什么吗?

tun0行以两个空格开头,因此line.split(" ")返回['', '', 'tun0:', ... ],这意味着元素1本身就是一个空格。

如果只使用纯split(),它将不会保留空白,只返回['tun0:']。(在这种情况下,您需要访问元素0而不是元素1。(

最新更新