2016-07-07 4 views
0

Я надеюсь, что кто-то может мне помочь. :)Python to PHP странная ошибка

Я вызываю скрипт python из PHP с помощью phpseclib/ssh2 i ssh на свой сервер, и он отлично работает.

Моя проблема в том, что если я использую «time.sleep (5)» в цикле моего скрипта python, я не получаю результат обратно, но если я удалю time.sleep (5) и time.sleep (3) оно работает.

У кого-нибудь есть идея, почему это происходит?

Если я пытаюсь использовать скрипт python, то моя консоль все идеально подойдет.!

items = [ 
    '1', 
    '2', 
    '3' 
] 
    itemArray = {} 
    def checker(): 
     for item in items: 
      time.sleep(5) # If added not working, if removed working, result gets send back 
      position = 1 # keeps track of the ranking position 
      for start in range(int(deep)): 
       time.sleep(3) 
       results = 'something' 
       for div in results: 
        try: 
         if div.find('i', href=True)['href'].find(something) != -1: 
          exit_conditon = True 
          break 
         else: 
          position += 1 
        except: 
         print "Unexpected error:", sys.exc_info()[0] 
         raise 
       if 'exit_conditon' in locals(): 
        if exit_conditon is True: 
         exit_conditon = False 
         itemArray.update({value: 1}) 
         break 

     sys.exit(itemArray) 
    checker() 

Пожалуйста, помогите.

Обновление: если у меня есть 3 строки в массиве элементов, мне нужно удалить второй time.sleep (5), чтобы заставить его работать, если у меня есть 2 элемента в моем массиве, мне нужно удалить первый time.sleep (5).

+0

Это не возвращает результат из чего? – martin

+0

Из массива элементов. Если удалить первый раз. Слез скрип работает, когда я вызываю его из php и возвращает все. Так странно. – user3502250

+0

Вы имеете в виду 'для элемента в элементах:' loop? – martin

ответ

0

Это зависит от того, сколько времени потребуется вашему сценарию для выполнения. Если ваш скрипт (php + python) занимает более 30 секунд с конфигурацией по умолчанию, их php убивает.

Просто добавьте set_time_limit(120) в начале вашего кода PHP

См http://php.net/manual/en/function.set-time-limit.php

И если вы выполняете PHP и питон скрипт на том же сервере, вы должны использовать exec или shell_exec. Так будет быстрее. См. php shell_exec() vs exec()

+0

В конце концов, я думаю, что скрипт будет запускаться, может быть, через час или два, тогда лучше всего поставить его в очередь, im используя laravel, поэтому я думаю добавить его в очередь там. Будет ли это работать? – user3502250

+0

Если ваш сервер является дистрибутивом linux, вы можете использовать cron для выполнения скриптов php или python каждый час, день .... На самом деле не рекомендуется делать скрипт php, для выполнения которого требуется более одной минуты. Вы должны использовать что-то еще. То, что вы можете сделать, это использовать mysql, sqlite или любую другую систему баз данных для хранения результата, а веб-скрипт php получит последний результат. Существует много модулей python для базы данных – user2740652

0

Сценарий теперь работает так, как я должен делать :) Спасибо «neubert» за ответ.

Если я устанавливаю $ ssh-> setTimeout() неограниченно, то могу ли я получить ответ, если скрипт остановится в какой-то момент?