2016-07-07 8 views
0

誰かが私を助けてくれることを願っています。 :)PythonからPHPへの奇妙なエラー

私はphpseclib/ssh2の助けを借りてPHPからPythonスクリプトを呼び出しています。私のSSHは私のサーバーに入っていて、正常に動作します。

私の問題は、もし私がtime.sleep(5)とtime.sleep(3)を削除した場合、私は私のpythonスクリプトのループで私は "できます。

これはなぜ起こるのでしょうか?

私は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行がある場合は、2番目のtime.sleep(5)を削除する必要があります。配列に2つのアイテムがある場合は、最初のtime.sleep (5)。

+0

何から結果が返ってきませんか? – martin

+0

アイテム配列から。最初のtime.sleepを削除すると、スクリプトはPHPから呼び出すときに動作し、すべてを返します。とても奇妙。 – user3502250

+0

'for item in items:'ループを意味しますか? – martin

答えて

0

実行するスクリプトの所要時間によって異なります。あなたのスクリプト(php + python)がデフォルトの設定で30秒以上かかる場合、phpはそれを強制終了します。

ちょうど

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

を参照してくださいあなたのPHPコードの先頭にset_time_limit(120)を追加し、同じサーバ上でPHPとPythonスクリプトを実行している場合は、execshell_execを使用する必要があります。このように速くなるでしょう。 php shell_exec() vs exec()

+0

最終的には、スクリプトが多分1時間か2時間実行されると思います。それから、それはキューに入れておくのが最善でしょう。私はlaravelを使ってキューに追加します。それはうまくいくのですか? – user3502250

+0

あなたのサーバがLinuxディストリビューションの場合、cronを使ってphpやpythonスクリプトを毎時、毎日実行することができます。実行するのに1分以上かかるPHPスクリプトを実行することは実際にはお勧めできません。あなたは別のものを使うべきです。あなたができることは、結果を格納するためにmysql、sqliteまたは他のデータベースシステムを使用することです、そして、Web PHPスクリプトは最新の結果を取得します。データベース用のPythonモジュールがたくさんあります – user2740652

0

スクリプトは私がするべきであるように今働いています:)答えのために "neubert"に感謝します。

$ ssh-> setTimeout()を無制限に設定すると、スクリプトがある時点で停止してもまだ応答が得られますか?