2015-12-22 43 views
10

Bir arka plan işlemi yürüterek tweet almak için bu koda sahibim. Aşağıdaki komut dosyası, subprocess.Popen işlevini kullanarak ana komut dosyasından çalıştırılır. Böylece ana komut dosyası, arka plan işlem komut dosyasını çağırdıktan sonra yürütmeyi durduracaktır.Ana komut dosyası durduğunda arka plan işleminden geçersiz bağımsız değişken hatası

def start_listner(unique_id, keyword, limit=200): 
    class CustomStreamListener(tweepy.StreamListener): 

     def __init__(self, api): 
      logger.info('runnning') 
      self.api = api 
      super(tweepy.StreamListener, self).__init__() 

      #setup rabbitMQ Connection 


     def on_status(self, status): 
      print status.text.encode('utf-8'), "\n" 
      #queue the tweet and writes the tweet to the log 

     def on_error(self, status_code): 
      #some code to not kill the stream 

     def on_timeout(self): 
      #some code to not kill the stream 

    sapi = tweepy.streaming.Stream(auth, CustomStreamListener(api)) 
    try: 
     logger.info('tracking started') 
     logger.info(keyword) 
     logger.info(type(keyword)) 
     kw = keyword 
     sapi.filter(track=[kw]) # keeps listening to the streaming api 
    except Exception, err: 
     logger.info(kw) # fails at this place when main py stops 
     logger.info(err) 

if __name__ == "__main__": 
    logger.info("just now started") 
    try: 
     a = str(sys.argv[1]) 
     b = str(sys.argv[2]) 
     #c = int(sys.argv[5]) 
     logger.info(a) 
     logger.info(b) 
    except Exception, err: 
     logger.info("inside main") 
    start_listner(a, b) 

en yüksek göre cevap here Ben tweetleri başarıyla eklenecektir böylece

import time 
import subprocess 
subprocess.Popen(["python", "StreamingAnalytics.py", 'SriLankaQ', 'lanka']) 

print 'I could escape.........' 
time.sleep(15) 

bir uyku eklemiş (kod üstünde) StreamingAnalytics.py çağırmak üzere şu ana komut dosyasını kullanabilirsiniz olarak Bu süre boyunca RabbitMQ kuyruğu. Ancak ana komut dosyası durduğunda arka plan işlemi aşağıdaki hatayı yazdırır.

2015-12-22 16: 28: 16.559 - ana - INFO - {text ': 'RT @Dory: Lanka şarkı Hattı bling \ xf0 \ x9F \ x98 \ X82 \ xf0 \ x9F \ x98 \ X82 'kaynak': iPhone için u'Twitter '}

2015-12-22 16: 28: 17.752 - ana - INFO - lanka

2015-12-22 16:28 : 17,752 - main - BİLGİ - [Errno 22] Geçersiz Bağımsız değişken

GÜNCELLEME: Ben onun argümanları iletme bir sorunu düşünce beri ana komut dosyası tarafından bir dosyaya yazma ve arka plan işlemi dosyasından dosyayı okuyarak argümanlar kullanımını kaldırıldı. Bu yüzden hala aynı hata geliyor. Geri tepme modülünü kullanarak bu hata hakkında daha fazla bilgi basabilirim.

2015-12-24 11:01:16,562 - __main__ - INFO - Traceback (most recent call last): 
File "StreamingAnalytics.py", line 84, in <module> 
    sapi.filter(track=[keyword]) 
File "C:\Python27\lib\site-packages\tweepy\streaming.py", line 445, in filter 
    self._start(async) 
File "C:\Python27\lib\site-packages\tweepy\streaming.py", line 361, in 
_start 
    self._run() 
File "C:\Python27\lib\site-packages\tweepy\streaming.py", line 294, in _run 
    raise exception IOError: [Errno 22] Invalid argument 
+0

Bu yüzden af değiştirmek zorunda kaldı ew şeyler, ama [benim örneğim] (https://gist.github.com/waynew/c47fe03405e451709906) benim için gayet iyi çalışıyor. Bu senin için de geçerli mi? Çalıştığınız ilk örnek başlatıcınız var (yani "subprocess.Popen ([" python "," StreamingAnalytics.py "," SriLankaQ "," lanka "]))) –

+0

" StreamingAnalytics.py "'inizi çalıştırabilirsiniz. 'subprocess.Popen' kullanmadan doğrudan çağırıyor? (yani terminalleki python StreamingAnalytics.py) çağrısı – Jon

+0

@WayneWerner Şimdi çalışıyor! "On_status" işlevinin içinde bir baskı bildirimim var. Çalıştığımda onu kaldırdığımda. Bunu da soruma dahil ettim. Bence sorun bununla ilgili. Her neyse, bunun bana çalışmasına neden olan cevabınız. Bir açıklama olarak yanıt olarak eklerseniz, yazdırmayı kaldırırken neden işe yarayacaktır. Doğru cevap olarak kabul etmekten mutluluk duyarım. –

cevap

2

Geri izlemeniz tweetpy tarafından engellenir.

Benim tavsiye:

  • düzenlemek tweepy/streaming.py
  • bulmak iki satır exception = ...
  • hemen önce ya da yeniden
  • koşudan sonra logging.exception("foobar") eklemek
  • sonrası tam traceback
+1

Bu, sorunun cevabını sağlamaz. Bir yazardan eleştiri yapmak veya açıklama istemek için yazılarının altında bir yorum bırakın. - [Yorum yazıla] (/ review/düşük kaliteli yazılar/10727819) –

+0

@MadPhysicist Daha iyi bir yanıt göndermenizi istiyorum! Şimdi tüm hukukçular olmak istiyorsanız, lütfen OP'yi dikkatli bir şekilde okuyun, tek bir soru içermez. –

+1

Sadece yaptığını söylemek uğruna cevap göndermek anlamsız. Yaklaşımınızın doğru olduğuna tamamen katılıyorum olsa da, böyle bir cevap göndermiyorsunuz. Önerdiğiniz adımlar temel olarak bir yorumda yer alan daha fazla bilgi için bir istektir. OP uygun olduğunda, asıl problemini düzeltmek için bir cevap gönderebilirsiniz. –