バックグラウンドプロセスを実行してツイートを取得するこのコードがあります。次のスクリプトは、subprocess.Popen
関数を使用してメインスクリプトから実行されます。そのため、メインスクリプトはバックグラウンドプロセススクリプトを呼び出した後に実行を停止します。メインスクリプトが停止したとき、バックグラウンドプロセスからの引数エラーが無効です
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
だから私afを修正しなければならなかった私の事例ではありますが、[私の例](https://gist.github.com/waynew/c47fe03405e451709906)はうまく動作します。それもあなたのために働くのでしょうか?私はあなたの最初のサンプルランチャーを実行しています( '' subprocess.Popen( "" python "、" StreamingAnalytics.py "、 'SriLankaQ'、 'lanka')') –
'StreamingAnalytics.py'を'subprocess.Popen'を使わずに直接呼び出していますか? (つまり、終端で 'python StreamingAnalytics.py'を呼び出します) – Jon
@WayneWernerこれは今動作します!私は 'on_status'関数の中でprintステートメントを持っています。私はそれを私の質問にも含めました。私は問題がそれにあると思う。とにかく、私にこれを働かせるあなたの答え。あなたが何らかの理由で答えとしてそれを追加した場合、なぜそれが働くのかは印刷物を取り除くときに機能します。私は正解としてそれを受け入れてうれしいです。 –