Python 芹菜汁
我有一个简单的芹菜任务,如下所示:Python 芹菜汁,python,celery,Python,Celery,我有一个简单的芹菜任务,如下所示: @celery.task def tail(): cmd = 'nslookup www.google.com' cm = shlex.split(cmd) out = subprocess.check_output(cm) print out 当工作人员执行任务时,输出如下内容: [2013-12-02 23:54:26,007: WARNING/Worker-2] Server: 192.168.1
@celery.task
def tail():
cmd = 'nslookup www.google.com'
cm = shlex.split(cmd)
out = subprocess.check_output(cm)
print out
当工作人员执行任务时,输出如下内容:
[2013-12-02 23:54:26,007: WARNING/Worker-2]
Server: 192.168.1.254
Address: 192.168.1.254#53
Non-authoritative answer:
Name: www.google.com
Address: 173.194.34.112
Name: www.google.com
Address: 173.194.34.113
Name: www.google.com
Address: 173.194.34.115
Name: www.google.com
Address: 173.194.34.114
Name: www.google.com
Address: 173.194.34.116
[2013-12-02 23:54:26,008: INFO/MainProcess] Task app.tail[23f625f7-d328-47c5-8f57- 90a330ebe100] succeeded in 0.0618259499897s: None
我需要芹菜任务来捕获每一行的标准输出,这样我就可以重定向它并将它存储到其他地方
我可以在芹菜文档中看到定义记录器和重定向标准输出的选项,但是我不知道如何连接它
建议将不胜感激
注意。这实际上与芹菜无关,如果您希望在捕获输出的同时执行命令,则应以不同的方式执行 请看一下子流程模块: 特别是关于捕获
stderr
的部分,因为它没有写入stdout
:)
嗯-我认为这个“将_stdouts_重定向到_logger(logger,loglevel=None,stdout=True,stderr=True)[source]将sys.stdout和sys.stderr重定向到一个日志实例”应该可以做到这一点。这篇文章也回避了这样一个事实:它是可以做到的,它是可以做到的,但它绝对不是最好的方式。很有可能您会意外地从其他进程捕获额外的输出。那么我可以只捕获芹菜日志条目吗?嗯。。。理论上,如果您创建自己的日志处理程序,则可以捕获芹菜日志条目。但是很难可靠地工作,因为多个线程/事件可以登录到同一个loghandler.Hmm-那么实现这一点的最佳方法是什么?我所需要的只是将一些日志事件捕获到一个单独的数据库中。
import celery
import subprocess
@celery.task
def tail():
process = subprocess.Popen('nslookup www.google.com', shell=True, stdout=PIPE, stderr=PIPE)
print 'Stdout: ', process.stdout
print 'Stderr: ', process.stderr