У меня есть этот код, чтобы получить твиты, запустив фоновый процесс. Следующий сценарий запускается из основного сценария с использованием функции 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)
Согласно набравшему наибольшему количеству голосов ответа here Я использую следующий основной скрипт для вызова StreamingAnalytics.py (выше коды)
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 'источник': u'Twitter для iPhone '}
2015-12-22 16: 28: 17752 - главный - INFO - ланка
2015-12-22 16:28 : 17,752 - main - INFO - [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
Так что я пришлось модифицировать ew, но [мой пример] (https://gist.github.com/waynew/c47fe03405e451709906) отлично работает для меня. Это тоже работает для вас? У меня есть ваш первый запускающий запуск этого запуска (т. Е. 'Subprocess.Popen ([" python "," StreamingAnalytics.py ", 'SriLankaQ', 'lanka']))) –
Можете ли вы, чтобы ваш' StreamingAnalytics.py' работал просто вызывая его напрямую, не используя 'subprocess.Popen'? (т. е. вызов 'python StreamingAnalytics.py' в терминале) – Jon
@WayneWerner Это работает сейчас! У меня есть оператор print внутри функции 'on_status'. Когда я удалил его, он сработал. Я включил это также в мой вопрос. Я думаю, что проблема в этом. Во всяком случае, ваш ответ, который заставил меня работать над этим. Если вы добавите его в качестве ответа с некоторым объяснением, почему он работает при удалении печати. Я был бы рад принять его в качестве правильного ответа. –