Мне нужна помощь, чтобы получить результат из pycurl, который я пытаюсь запустить в подпроцессе. Этот вывод я пытаюсь поставить в очередь и вытащить эту очередь из другого класса.Подпроцесс pycurl в отдельной теме
, к сожалению, сейчас я не имею выход = (
import threading
import random
import time
import Queue
import urllib2
import sys
import simplejson, pycurl
import sys, signal
queue = Queue.Queue()
keep_running = True
user = "username"
pswd = "pass"
class MyThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
curl_path = '/usr/bin/curl'
curl_list = [curl_path]
args = ('curl', 'https://stream.twitter.com/1/statuses/filter.json?track=java', '-u', 'user:pass')
for arg in args:
curl_list.append(arg)
child = subprocess.Popen(
curl_list,
shell=False,
#stdout=subprocess.PIPE)
stderr=subprocess.PIPE)
try:
out += child.communicate()
c_out.write(out)
self.queue.put(c_out)
self.queue.task_done()
except KeyboardInterrupt:
child.kill()
class Starter():
def __init__(self):
self.queue = queue
t = MyThread(self.queue)
t.daemon=True
t.start()
self.next()
def next(self):
while True:
time.sleep(0.5)
if not self.queue.empty():
line = self.queue.get(timeout=0.2)
print '\n\nIM IN STARTER %s' % line
else:
print 'waiting for queue'
def main():
try:
Starter()
except KeyboardInterrupt, e:
print 'Stopping'
raise
main()
Большое спасибо за ваш ответ. Можете ли вы помочь мне в еще одном: я забыл включить эту переменную 'c_out', определенную как' c_out = cStringIO.StringIO() ', но когда я запускаю ваш код, я все еще ничего не получите в очереди – Vor
Почему вы используете cStringIo? Я не уверен, что это ... вы должны просто добавить строку в очередь. – EEP
Я пробовал то, что вы предложили без cString, и просто положил 'out' в очередь, но позже, когда я проверяю очередь, это ничего мне не показывает. Я хочу сказать, что он пуст – Vor