我正在尝试使用我输入的IP地址和在python上使用os的grep的IP地址匹配IP地址,但是当我运行我的代码时,代码说不匹配
app = Tk()
app.title('IP Address')
app.geometry('250x150+200+200')
b = StringVar()
ip = os.popen("ip -4 addr show wlan0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'").read()
#this will insert wlan0 ip address to variable ip
print(ip)
def com():
c = b.get()
if c == ip:
labl3 = Label(text='Match').pack()
app.destroy()
else:
labl3 = Label(text='Not Match').pack()
labl1 = Label(text='Input Ip address',font=30).pack()
text = Entry(textvariable=b).pack()
button1 = Button(text='Press to print', command= com).pack()
app.mainloop()
我该如何解决?
答案 0 :(得分:2)
c == ip
仅在两个字符串完全相同的情况下评估为真。
由于ip
包含一些尾随空格字符(实际上,我刚刚运行了命令,并且确实包含了尾随换行字符),因此这可能未达到true。
因此,您应该这样比较它们:c.strip() == ip.strip()
.strip()
方法删除给定字符串中的所有尾随和前导空格。因此,以上命令正在比较字符串的尾随/前导空格删除版本。
提示:如果您以后想调试类似的内容,请检查len(c)
和len(ip)
,看看它们的长度是否相同。
答案 1 :(得分:2)
如果您使用的是python3,则有一个ipaddress模块。人们会使用它的方式如下:
if ipaddress.ip_address(str(lab1)): # valid ip
pass # or whatever
else:
raise Exception('Invalid ip address')
如果您使用的是python2,则有一个backport。希望这会有所帮助。
答案 2 :(得分:0)
您可以通过修改正则表达式
pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
之所以这样,是因为.
是一个通配符,代表“每个字符”。
答案 3 :(得分:0)
几个入门问题。
我假设由于使用ip
命令而在* nix机器上运行此命令,除非您为Mac或Windows的Linux安装了iproute2mac
。您能告诉我们您在什么平台上运行吗?另外,您能告诉我命令ip -4 addr show
的输出吗(请忽略您不想在线共享的任何详细信息)。除了平台相关的问题外,它可能是字符串修剪或字符转义的问题。如果您可以提供输入的打印调试,那也将非常有帮助。
谢谢!