如何在嵌入式Python中禁用控制台登录(猪)

2024-10-02 08:28:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试将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'

命令行输入:

^{pr2}$

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

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


Tags: 文件命令行hadooppackagenewlibusrsys
2条回答

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

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

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

令人沮丧的是,我相信jython将这些消息写入stdout而不是stderr,因此将stderr放到其他地方并不能帮助您解决问题。在

另一个选择是在pig0.12发布时使用流式python而不是jython。请参见PIG-2417以获取更多详细信息。在

登录Java程序/库通常是通过配置或.properties文件来配置的。我肯定有一个给猪的。你要找的可能是http://svn.apache.org/repos/asf/pig/trunk/conf/pig.properties。在

编辑:看起来这是Jython特有的。在

我无法确定是否可以禁用此功能,但除非我能找到更干净的方法,否则我会考虑在.jar加载阶段重定向sys.stderr(或sys.stdout):

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

相关问题 更多 >

    热门问题