2015-12-22 5 views
10

バックグラウンドプロセスを実行してツイートを取得するこのコードがあります。次のスクリプトは、subprocess.Popen関数を使用してメインスクリプトから実行されます。そのため、メインスクリプトはバックグラウンドプロセススクリプトを呼び出した後に実行を停止します。メインスクリプトが停止したとき、バックグラウンドプロセスからの引数エラーが無効です

私は(コードの上)StreamingAnalytics.pyを起動するには、次の主なスクリプトを使用し、最高投票答え hereによると
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) 

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

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

ツイートが正常に追加されますので、私は睡眠を追加しましたその間のRabbitMQキューしかし、メインスクリプトが停止すると、バックグラウンドプロセスは次のエラーを出力します。

2015年12月22日16:28:16559 - メイン - INFO - { 'テキスト':「RT @Dory:スリランカ 歌ホットライン見せびらかす\ XF0 \ x9f \ x98 \ X82 \ XF0 \ x9f \ x98 \ X82 'ソース':iPhone用u'Twitter '}

2015年12月22日16:28:17752 - メイン - INFO - スリランカ

2015年12月22日午後04時28分:17,752 - メイン - 情報 - [Errno 22]無効な引数

UPDATE:私は、引数を渡すことでその問題を考えているので 私は、メインスクリプトでファイルに書き込むとバックグラウンド・プロセスのファイルからファイルを読み取ることで、引数の使用を削除しました。したがって、

subprocess.Popen(["python", "StreamingAnalytics.py"]) 

でも同じエラーが発生します。トレースバックモジュールを使用して、このエラーに関する詳細情報を印刷することができました。

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

だから私afを修正しなければならなかった私の事例ではありますが、[私の例](https://gist.github.com/waynew/c47fe03405e451709906)はうまく動作します。それもあなたのために働くのでしょうか?私はあなたの最初のサンプルランチャーを実行しています( '' subprocess.Popen( "" python "、" StreamingAnalytics.py "、 'SriLankaQ'、 'lanka')') –

+0

'StreamingAnalytics.py'を'subprocess.Popen'を使わずに直接呼び出していますか? (つまり、終端で 'python StreamingAnalytics.py'を呼び出します) – Jon

+0

@WayneWernerこれは今動作します!私は 'on_status'関数の中でprintステートメントを持っています。私はそれを私の質問にも含めました。私は問題がそれにあると思う。とにかく、私にこれを働かせるあなたの答え。あなたが何らかの理由で答えとしてそれを追加した場合、なぜそれが働くのかは印刷物を取り除くときに機能します。私は正解としてそ​​れを受け入れてうれしいです。 –

答えて

2

あなたのトレースバックはtweetpyによって不明瞭です。

私の推薦:再び

  • 編集tweepy/streaming.py
  • 二行exception = ...
  • は、右実行する前に、または
  • logging.exception("foobar")を追加見つける
  • ポストの完全なトレースバック
+1

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](レビュー/低品質の投稿/ 10727819) –

+0

@MadPhysicist私はあなたに良い答えを投稿するように挑戦します!あなたがすべての法律家になりたいなら、OPを慎重に読んでください。一つの質問は含まれていません。 –

+1

あなたはそれが無意味だと言っているだけの回答を投稿します。私はあなたのアプローチが正しいものであることに完全に同意していますが、そのような答えを投稿しているわけではありません。お勧めの手順は、基本的にはコメントに入れる必要がある詳細な情報です。 OPが遵守したら、実際の問題を解決する回答を投稿することができます。 –

関連する問題