Как запустить функцию в цикле, строка за строкой извлекая аргументы из файла

#python

#python

Вопрос:

Я пишу скрипт, который принимает URL, имя пользователя и пароль в качестве аргументов, выполняет веб-запрос и регистрирует повторные запросы. Я хотел бы использовать csv-файл, содержащий множество сайтов / учетных данных, и выполнять циклический запрос для каждой записи, и если есть какие-либо исключения / ошибки, я хочу просто перейти к следующей записи в файле, но мой скрипт зависает после первого запуска цикла

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

 #currently Im using command line arguments to manually input the 
#arguments for the function below, which works fine but I want to pull 
#arguments from a list in a csv file (see comments at end for what ive #tried)


def webrequest(username,password):
 url = site
    headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36",
               'Accept-Encoding' : 'none'
    }
    payload = {'log': username,
               'pwd': password
               }
    session = requests.session
    r = session.post(url, headers=headers, data=payload)
    if r.status_code == 404
        print "404"
        #end function, move on to next line in csv
    if r.status_code == 200
        print r.text
        # move on to next line in csv



#file = open(file, r)
#with open(file) as f:
#    for line in f:
#       args = line.split(",")
#       webrequest(args[0],args[1],args[2])

  

Я ожидаю, что когда функция достигнет конца, она начнет все сначала, используя следующую строку в файле csv, но этого не происходит .. она просто зависает в командной строке

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

1. Вы отладили свой код? Нет вывода / нет ошибки?

2. Вы уверены, что это не просто выполняется очень долго? Вы пробовали печатать в цикле?

3. Сначала я бы протестировал это всего с двумя строками в файле. Затем я бы рассмотрел возможность введения задержки между запросами.

Ответ №1:

Попробуйте session.post() с параметром timeout. Подробности здесь:http://docs.python-requests.org/en/master/user/advanced/#timeouts

Скорее всего, ваш веб-сервер не возвращает ответ, поэтому вы чувствуете, что ваша функция застряла.

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

1. Спасибо, похоже, это проблема. Однако теперь, когда я установил тайм-аут, по достижении этого тайм-аута возникает исключение, и процесс существует. Как я могу правильно обработать это исключение? нравится if r.timeout: blah blah ?

2. Я думаю, что вашим первым шагом должно быть отлаживание вашего сервера и выяснение причины истечения времени ожидания. Вы можете узнать больше об обработке исключений Python здесь: programiz.com/python-programming/exception-handling

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

4. Хорошо, в этом случае вы можете просто обработать исключение тайм-аута и перейти к следующей строке.