python标准输出_python实时获取标准输出

该博客讨论了一种使用Python的multiprocessing和Queue模块来实现实时获取应用程序标准输出并监测其是否挂起的方法。通过创建一个生成器函数来读取进程输出并将其放入队列,以及一个消费者函数来处理队列中的数据并检查应用状态。然而,代码在运行时遇到了PicklingError,表明无法序列化某个对象(可能是线程锁),导致进程间通信失败。
摘要由CSDN通过智能技术生成

我现在用multiprocessing和Queue来实现实时获取一个app的标准输出,同时监视app是否hang。

下面是代码

import subprocess

import time

import multiprocessing

import Queue

def generator(q):

pipe = subpross.Popen("ping 10.231.198.120 -t", stdout=subprocess.PIPE)

while True:

i = pipe.stdout.readline()

print i

#if i == "":

# break

if q.full():

continue

q.put(i)

def consumer():

q = Queue.Queue()

p = multiprocessing.Process(target=generator, args=(q,))

p.start()

while True:

if q.empty():

time.sleep(10)

if q.empty():

p.terminate()

print "test is hanging"

break

value = q.get()

if value is None:

break

print 'Get: %s' % value

print "finished."

p.join()

if __name__ == '__main__':

consumer()

错误为:

Traceback (most recent call last):

File "test1.py", line 110, in

consumer()

File "test1.py", line 90, in consumer

p.start()

File "C:\Python27\lib\multiprocessing\process.py", line 130, in start

self._popen = Popen(self)

File "C:\Python27\lib\multiprocessing\forking.py", line 277, in __init__

dump(process_obj, to_child, HIGHEST_PROTOCOL)

File "C:\Python27\lib\multiprocessing\forking.py", line 199, in dump

ForkingPickler(file, protocol).dump(obj)

File "C:\Python27\lib\pickle.py", line 224, in dump

self.save(obj)

File "C:\Python27\lib\pickle.py", line 331, in save

self.save_reduce(obj=obj, *rv)

File "C:\Python27\lib\pickle.py", line 419, in save_reduce

save(state)

File "C:\Python27\lib\pickle.py", line 286, in save

f(self, obj) # Call unbound method with explicit self

File "C:\Python27\lib\pickle.py", line 649, in save_dict

self._batch_setitems(obj.iteritems())

File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems

save(v)

File "C:\Python27\lib\pickle.py", line 286, in save

f(self, obj) # Call unbound method with explicit self

File "C:\Python27\lib\pickle.py", line 548, in save_tuple

save(element)

File "C:\Python27\lib\pickle.py", line 286, in save

f(self, obj) # Call unbound method with explicit self

File "C:\Python27\lib\pickle.py", line 725, in save_inst

save(stuff)

File "C:\Python27\lib\pickle.py", line 286, in save

f(self, obj) # Call unbound method with explicit self

File "C:\Python27\lib\pickle.py", line 649, in save_dict

self._batch_setitems(obj.iteritems())

File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems

save(v)

File "C:\Python27\lib\pickle.py", line 331, in save

self.save_reduce(obj=obj, *rv)

File "C:\Python27\lib\pickle.py", line 419, in save_reduce

save(state)

File "C:\Python27\lib\pickle.py", line 286, in save

f(self, obj) # Call unbound method with explicit self

File "C:\Python27\lib\pickle.py", line 649, in save_dict

self._batch_setitems(obj.iteritems())

File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems

save(v)

File "C:\Python27\lib\pickle.py", line 331, in save

self.save_reduce(obj=obj, *rv)

File "C:\Python27\lib\pickle.py", line 396, in save_reduce

save(cls)

File "C:\Python27\lib\pickle.py", line 286, in save

f(self, obj) # Call unbound method with explicit self

File "C:\Python27\lib\pickle.py", line 748, in save_global

(obj, module, name))

pickle.PicklingError: Can't pickle : it's not found as threa

d.lock

C:\Users\songxu\Desktop>Traceback (most recent call last):

File "", line 1, in

File "C:\Python27\lib\multiprocessing\forking.py", line 381, in main

self = load(from_parent)

File "C:\Python27\lib\pickle.py", line 1378, in load

return Unpickler(file).load()

File "C:\Python27\lib\pickle.py", line 858, in load

dispatch[key](self)

File "C:\Python27\lib\pickle.py", line 880, in load_eof

raise EOFError

EOFError

这个到底是什么错误?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值