1

私はPython2.7でうまく動作するが、2.6では動作しないこのスクリプトを持っています:

def main():
   tempfile = '/tmp/tempfile'
   stats_URI="http://x.x.x.x/stats.json"
   hits_ = 0
   advances_ = 0
   requests = 0
   failed = 0

   as_data = urllib.urlopen(stats_URI).read()
   data = json.loads(as_data)

   for x, y in data['hits-seen'].iteritems():
      hits_ += y

   # Total of failed vtop requests
   for x, y in data['vals-failed'].iteritems():
      failed += y

   requests = data['requests']

   advances_ = requests - failed

   f = open(tempfile,'w')

   line1 = "hits: " + str(hits_) + "\n"
   line2 = "advances: " + str(advances_) + "\n"

   f.write(line1)
   f.write(line2)
   f.close()

   return 0

私が受け取っているエラーメッセージは次のように言っています:

Traceback (most recent call last):   File "./json.test.py", line 14, in <module>
    main()   File "./json.test.py", line 8, in main
    as_data = urllib.urlopen(stats_URI).read()   File "/usr/lib/python2.6/urllib.py", line 86, in urlopen
    return opener.open(url)   File "/usr/lib/python2.6/urllib.py", line 207, in open
    return getattr(self, name)(url)   File "/usr/lib/python2.6/urllib.py", line 346, in open_http
    h.endheaders()   File "/usr/lib/python2.6/httplib.py", line 908, in endheaders
    self._send_output()   File "/usr/lib/python2.6/httplib.py", line 780, in _send_output
    self.send(msg)   File "/usr/lib/python2.6/httplib.py", line 739, in send
    self.connect()   File "/usr/lib/python2.6/httplib.py", line 720, in connect
    self.timeout)   File "/usr/lib/python2.6/socket.py", line 561, in create_connection
    raise error, msg IOError: [Errno socket error] [Errno 110] Connection timed out

ここで何が欠けていますか?インターネットでの検索はあまり役に立ちません:-(

4

2 に答える 2

0

何度か接続してみてはどうですか:

as_data = get_urldata(stats_URI) #Note this will be None, if it failed to connect after 20 attempts

どこ

def get_urldata(url, t=20):
    '''attempt to read the url t times (by default 20)'''
    for i in xrange(t):
         try:
             return urllib.urlopen(url).read()
         except IOError:
             pass

このライブラリは改善される可能性があるため、おそらくurllib2ではなくを使用する必要があります。urllib

于 2012-08-30T13:56:05.823 に答える
0

問題は実際には、アクセスできないサーバーに設定されていた http_proxy 環境変数でした。を使用してバイパスしました

urllib.urlopen(stats_URI, proxies={}).read()

それ以来、すべてがうまくいきました。

どうもありがとう、

S.

于 2012-08-31T14:20:27.373 に答える