-1

我目前正在玩将 pig 嵌入到 python 中,并且每当我运行文件时它都可以工作,但是它会阻塞命令行,输出如下所示:

*sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/hue-plugins-2.3.0-cdh4.3.0.jar'
*sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/paranamer-2.3.jar'
*sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/avro-1.7.4.jar'
*sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/slf4j-api-1.6.1.jar'
*sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/commons-configuration-1.6.jar'

命令行输入:

pig embedded_pig_testing.py -p /home/cloudera/Documents/python_testing_config_files/test002_config.cfg

传递的参数是一个文件,其中包含我在测试中使用的一堆变量。

有没有办法让脚本不将这些操作记录到命令行?

4

2 回答 2

1

Java 程序/库中的日志记录通常通过配置或.properties文件进行配置。我敢肯定有一个猪。可能是您正在寻找的东西是http://svn.apache.org/repos/asf/pig/trunk/conf/pig.properties

编辑:看起来这是特定于 Jython 的。

我无法确定是否可以完全禁用它,但除非我能找到更干净的东西,否则我会考虑在加载阶段简单地重定向sys.stderr(或):sys.stdout.jar

import os
import sys

old_stdout, old_stderr = sys.stdout, sys.stderr
sys.stdout = sys.stderr = open(os.devnull, 'w')

do_init()  # load your .jar's here

sys.stdout, sys.stderr = old_stdout, old_stderr
于 2013-10-01T20:39:16.770 回答
0

此日志记录来自 jython 扫描您的 Java 包以构建缓存以供以后使用:https ://wiki.python.org/jython/PackageScanning

只要您的脚本仅使用完整的类导入(无通配符),您就可以通过属性import x.y.*禁用包扫描:python.cachedir.skip

pig ... -Dpython.cachedir.skip=true  ... 

令人沮丧的是,我相信 jython 将这些消息写入 stdout 而不是 stderr,因此在其他地方管道 stderr 不会帮助您。

另一种选择是在 pig 0.12 发布时使用流式 python 而不是 jython。有关详细信息,请参阅PIG-2417 。

于 2013-10-03T15:38:50.153 回答