Python 单独线程中的pycurl子进程

Python 单独线程中的pycurl子进程,python,multithreading,queue,subprocess,pycurl,Python,Multithreading,Queue,Subprocess,Pycurl,我需要帮助从pycurl获取输出,我正试图在子流程中运行该输出。我试图将这个输出放入一个队列,然后在另一个类中取出这个队列 不幸的是,现在我没有输出=( 您似乎有点混淆了子进程的参数…args列表应该是您将用于curl的命令的所有不同部分,您当前正在以一种不适用于子进程的方式将它们放在一起。您的curl\u列表应该更像这样 curl_path = '/usr/bin/curl' curl_list = [curl_path, 'https://stream.twitter.com/1/statu

我需要帮助从pycurl获取输出,我正试图在子流程中运行该输出。我试图将这个输出放入一个队列,然后在另一个类中取出这个队列

不幸的是,现在我没有输出=(


您似乎有点混淆了子进程的参数…args列表应该是您将用于curl的命令的所有不同部分,您当前正在以一种不适用于子进程的方式将它们放在一起。您的curl\u列表应该更像这样

curl_path = '/usr/bin/curl'
curl_list = [curl_path, 'https://stream.twitter.com/1/statuses/filter.json?track=java', '-u', 'user:pass']
你现在也在使用一个不必要的for…你不想循环这个列表,你只想把它传递给子进程,子进程会适当地处理它。你还想让stdout从中得到结果,所以你也需要在那里包括管道

也就是说,整个事情应该是

def run(self):
    curl_path = '/usr/bin/curl'
    curl_list = [curl_path, 'https://stream.twitter.com/1/statuses/filter.json?track=java', '-u', 'user:pass']

    child = subprocess.Popen(curl_list,
                             shell=False,
                             stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE)
    try:
        out += child.communicate()[0]
        c_out.write(out)
        self.queue.put(c_out)
        self.queue.task_done()
        except KeyboardInterrupt:
            child.kill()

可能想再看一看,以便更好地理解上面的更改。我实际上还没有通过解释器来运行它,因此它可能并不完美,但它应该会让您朝着正确的方向前进……祝您好运!

非常感谢您的回复,您能帮我做一件事吗:我忘了包含变量
c\out
的定义类似于
c_out=cStringIO.StringIO()
但是当我运行您的代码时,队列中仍然没有任何内容。为什么您要使用cStringIo?我不确定这是什么…您应该能够将字符串添加到队列中。我尝试了您建议的不使用cString的方法,只将
输出
放入队列中,但稍后当我检查队列时,它不会向我显示任何内容。我是认真的它是空的
def run(self):
    curl_path = '/usr/bin/curl'
    curl_list = [curl_path, 'https://stream.twitter.com/1/statuses/filter.json?track=java', '-u', 'user:pass']

    child = subprocess.Popen(curl_list,
                             shell=False,
                             stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE)
    try:
        out += child.communicate()[0]
        c_out.write(out)
        self.queue.put(c_out)
        self.queue.task_done()
        except KeyboardInterrupt:
            child.kill()