Ich habe diesen Code, um Tweets durch Ausführen eines Hintergrundprozesses zu erhalten. Das folgende Skript wird mit der Funktion subprocess.Popen
vom Hauptskript ausgeführt. Damit das Hauptskript nach dem Aufruf des Hintergrundprozessskripts nicht mehr ausgeführt wird.Ungültiger Argumentfehler vom Hintergrundprozess, wenn das Hauptskript stoppt
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)
Nach dem höchsten gestimmten Antwort here Ich benutze das folgende Hauptskript die StreamingAnalytics.py (über Code) aufzurufen
import time
import subprocess
subprocess.Popen(["python", "StreamingAnalytics.py", 'SriLankaQ', 'lanka'])
print 'I could escape.........'
time.sleep(15)
Ich habe einen Schlaf gegeben, so werden die Tweets erfolgreich hinzugefügt werden die RabbitMQ-Warteschlange während dieser Zeit. Sobald das Hauptskript gestoppt wird, wird jedoch der folgende Fehler ausgegeben.
2015-12-22 16: 28: 16.559 - Haupt - INFO - { 'Text': ‚RT @Dory: lanka Gesang Hotline bling \ xf0 \ x9F \ x98 \ x82 \ xf0 \ x9F \ x98 \ x82 'Quelle': u'Twitter für iPhone '}
2015-12-22 16: 28: 17.752 - Haupt - INFO - lanka
2015-12-22 16:28 : 17,752 - Haupt - INFO - [Errno 22] ungültiges Argument
UPDATE: Da ich dachte, sein ein Problem nebenbei Argumente entfernte ich die Verwendung von Argumenten, indem sie in eine Datei von Haupt-Skript zu schreiben und die Datei aus Hintergrundprozess-Datei zu lesen. Also,
subprocess.Popen(["python", "StreamingAnalytics.py"])
Aber immer noch der gleiche Fehler kommt. Mit dem Traceback-Modul könnte ich mehr Informationen über diesen Fehler drucken.
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
Also ich musste af modifizieren ew dinge, aber [mein beispiel] (https://gist.github.com/waynew/c47fe03405e451709906) funktioniert ganz gut für mich. Funktioniert das auch für dich? Ich habe dein erstes Beispiel Launcher läuft es (dh 'subprocess.Popen ([" python "," StreamingAnalytics.py ", 'SriLankaQ', 'lanka'])') –
Können Sie einfach Ihre 'StreamingAnalytics.py' läuft Rufen Sie es direkt auf, ohne den 'subprocess.Popen' zu verwenden? (Rufen Sie zum Beispiel 'python StreamingAnalytics.py' in einer Endstation auf) – Jon
@WayneWerner Es funktioniert jetzt! Ich habe eine Druckanweisung in der 'on_status'-Funktion. Wenn ich das entfernte, funktionierte es. Das habe ich auch auf meine Frage bezogen. Ich denke, das Problem ist damit. Jedenfalls ist es deine Antwort, die mich dazu gebracht hat, das zu tun. Wenn Sie es als Antwort mit einer Erklärung hinzufügen, warum es funktioniert, wenn Sie drucken entfernt. Ich würde es gerne als die richtige Antwort akzeptieren. –