Я пытался проверить введенную строку (sys argv[1]
в данном случае). Мне нужно создать скрипт, который проходит через файл журнала и сопоставляет записи для исходного и целевого ip с любым аргументом, введенным в скрипт. Типы допустимых входных данных:
- IP или частичный IP
- «любой» (строка, которая означает все IP-адреса в данном столбце).
Пока у меня есть следующий код. Всякий раз, когда я запускаю скрипт в bash вместе с аргументом (например, любым случайным числом или словом / алфавитом и т. Д.), Я получаю ошибки. Пожалуйста, дайте мне знать, как я могу их исправить. Очень ценю способ проверки ввода по IP-адресу reg ex и слову any.
#!/usr/bin/python
import sys,re
def ipcheck(ip):
#raw patterns for "any" and "IP":
ippattern = '([1-2]?[0-9]?[0-9]\.){1,3}([1-2]?[0-9]?[0-9])?'
anypattern = any
#Compiled patterns
cippattern = re.compile(ippattern)
canypattern = re.compile(any)
#creating global variables for call outside function
global matchip
global matchany
#matching the compiled pattern
matchip = cippattern.match(ip)
matchany = canypattern.match(ip)
new = sys.argv[1]
snew = str(new)
print type(snew)
ipcheck(new)
Также я пытался сделать это таким образом, но это продолжало давать мне ошибки, возможно ли передать 2 аргумента в цикл if через «ИЛИ |» оператор? Как бы я сделал это таким образом? [/ B]
#if (matchip | matchany) :
#print "the ip address is valid"
#else:
#print "Invalid Destination IP"
Error
========================
user@bt:/home# ./ipregex.py a
<type 'str'>
Traceback (most recent call last):
File "./ipregex.py", line 21, in <module>
ipcheck(new)
File "./ipregex.py", line 15, in ipcheck
matchany = re.match(anypattern,ip)
File "/usr/lib/python2.5/re.py", line 137, in match
return _compile(pattern, flags).match(string)
File "/usr/lib/python2.5/re.py", line 237, in _compile
raise TypeError, "first argument must be string or compiled pattern"
TypeError: first argument must be string or compiled pattern
=============================================== ===========
EDIT
Я пытался сопоставить IP без компиляции регулярного выражения. Поэтому я изменил скрипт для этого. Это привело к ошибке:
Error
user@bt:/home# ./ipregex.py a
<type 'str'>
Traceback (most recent call last):
File "./ipregex.py", line 21, in <module>
ipcheck(new)
File "./ipregex.py", line 15, in ipcheck
matchany = anypattern.match(ip)
AttributeError: 'builtin_function_or_method' object has no attribute 'match'
=============================================== ===========
EDIT # 2
Мне удалось воспроизвести мою ошибку в более простой версии кода. Какого черта я делаю не так ??????
#!/usr/bin/python
import sys
import re
def ipcheck(ip):
anypattern = any
cpattern = re.compile(anypattern)
global matchany
matchany = cpattern.match(ip)
if matchany:
print "ip match: %s" % matchany.group()
new = sys.argv[1]
ipcheck(new)
ERROR
user@bt:/home# ./test.py any
Traceback (most recent call last):
File "./test.py", line 14, in <module>
ipcheck(new)
File "./test.py", line 8, in ipcheck
cpattern = re.compile(anypattern)
File "/usr/lib/python2.5/re.py", line 188, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.5/re.py", line 237, in _compile
raise TypeError, "first argument must be string or compiled pattern"
TypeError: first argument must be string or compiled pattern