как запустить и проверить выполнение в python

#python #regex

#python #регулярное выражение

Вопрос:

Я совершенно новичок в Python.Мне нужно написать скрипт на Python, который анализирует URL запроса apache и извлекает из него некоторые данные.

Скрипт является :

 #!/usr/bin/python

import sys
import re

for line in sys.stdin:
    ipAddress = re.search('ipAddress=([^amp;]*)', line)
    key = re.search('key=([^amp;]*)', line)
    if len(ipAddress.group(1)) != 0 and len(key.group(1)) != 0:
        print "%st%s" % (ipAddress.group(1), key.group(1))
  

Пожалуйста, скажите мне, в чем ошибка в скрипте и как ее проверить с помощью ввода, подобного этому:

 GET request?key=xxxxxxxxxxamp;ipAddress=000.000.000.00amp;id=blah... HTTP/1.1
  

Комментарии:

1. Вы пробовали его отлаживать? Или даже просто выполнить некоторый код в консоли Python, чтобы посмотреть, что произойдет?

2. Вам нужно предоставить дополнительную информацию здесь. Я выполнил этот скрипт, вставленный в ваш пример, и получил результат. Очевидно, что опубликованный код работает, но, возможно, не так, как ожидалось. Можете ли вы рассказать нам, что вы видите, и чего вы ожидали?

3. В чем проблема использования модуля urlparse.

4. Проверьте urlparse в стандартной библиотеке, которая поможет вам правильно и безопасно анализировать такие строки.

Ответ №1:

Вы не указали, какую ошибку вы получаете, и ваш код не генерирует никаких ошибок для меня, но я вижу несколько вещей, которые могут пойти не так с вашим кодом.

Во-первых, вам нужен просто URL, а не метод и HTTP-версия (что могло бы вызвать некоторые проблемы, если бы IPAddress или key были последними полями), поэтому вам следует разделить строку перед ее анализом:

 method, url, version = line.split(' ')
  

Во-вторых, вы будете получать ошибки, если URL-адрес не содержит поля key или ipAddress , потому что ваш код проверки соответствия неисправен. Вместо этого вам следует использовать этот код:

 for line in sys.stdin:
    method, url, version = line.split(' ')
    ipAddress = re.search('ipAddress=([^amp;]*)', url)
    key = re.search('key=([^amp;]*)', url)
    if ipAddress and key:
        print "%st%s" % (ipAddress.group(1), key.group(1))