2012-07-09 3 views
0

저는 인터넷이 고장 났을 때 재시작해야하는 파이썬 스크립트 (Mac OS X에서 실행 중)가 있습니다. 인터넷이 다운되면 현재 스크립트를 죽이고 인터넷이 다시 시작될 때까지 기다렸다가 다시 시작하고 싶습니다. 또는 가능한 경우 내부에서 기능을 다시 시작하십시오.인터넷이 다운되면 파이썬 스크립트를 다시 시작하십시오.

import tweetstream 

    # ... 

    with tweetstream.FilterStream(username, password, track = words) as stream: 
     for tweet in stream: 
      db.tweets.save(tweet) 

을 현재, 인터넷, 다운 스트림 정지 간다 다시 연결하지 않는 경우 다음과 같이

파이썬 코드의 문제 부분이다.

+6

전체 인터넷이 작동하는 경우 스크립트보다 심각한 문제가 발생할 것입니다. : P –

+1

http://istheinternetdown.com/ – blindjesse

답변

1

os에 따라 다릅니다. 몇 가지 구체적인 방법이 있습니다. 첫 번째 크로스 플랫폼 방법은 인터넷 서버에 일부 패킷을 보내는 자체 핑입니다. 인터넷을 사용할 수 없다는 정보를받지 못하면

1

this python implementation of ping을 하위 프로세스로 사용해보십시오. 따라서 너무 많은 시간 초과가 발생하면 네트워크가 다운 된 것을 알게되고 트윗 프로세스를 다시 시작할 수 있습니다 (단,이 작업을 위해서는 tweeting 프로세스 전체를 자체 기능으로 두어야합니다)

+0

+1 멋진 링크 :). 그러나 프로젝트가 짧고 간단한 것이라면 과잉 일 수 있습니다. – tarashish

0

은 아마 당신은 이런 식으로 뭔가를 시도 할 수 :

import urllib2 

def internet_on(): 
    try: 
     response=urllib2.urlopen('http://74.125.131.94/',timeout=1) 
     return True 
    except urllib2.URLError as err: pass 
    return False 

74.125.131.94는 google.co.in의 IP 주소입니다. 더 신속하게 반응 할 것으로 생각하는 사이트를 사용할 수 있습니다. 숫자 IP 주소를 사용하면 DNS 조회가 필요 없으므로 urllib2.urlopen 호출을 차단할 수 있습니다. timeout = 1 매개 변수는 인터넷을 사용할 수없는 경우에도 urlopen 호출에 1 초 이상 걸리지 않도록합니다.

이제 internet_on() 함수를 호출하면됩니다. 연결이 on이면 true을 반환하고 그렇지 않으면 false을 반환합니다. 그런 다음 모든 tweeting 코드를 함수 안에 넣고 호출 할 수 있습니다. (@inspectorG4dget 제안).

편집 : 스트림 그냥 검사() 함수를 호출을 중지하고 인터넷 연결이 다시 때, 그것은 당신의 트윗 함수를 호출 할 때 다음

def check(): 
    while not internet_on(): 
     pass 
    print "internet connection is on" 
    // call the tweet stuff function here. 

처럼 뭔가를 할 수 확인 연속 들어 다시 시작하십시오.

+0

Tarashish에게 감사드립니다. 나는 현재 이와 같은 코드를 가지고 있으므로 네트워크가 작동 중인지 확인할 수는 있지만 30 초마다 점검하고 작동이 중단 된 경우 어떻게 다시 시작해야하는지 확신 할 수 없습니다. 어떤 도움을 주시면 감사하겠습니다. – Gregory

+0

조금 편집했습니다. 그것이 당신이 원하는 것을하는지보십시오. – tarashish