加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

从python执行和捕获java执行的输出

发布时间:2020-12-20 13:37:59 所属栏目:Python 来源:网络整理
导读:我用hadoop api在 java编写了一个程序.所以,那个java代码的输出是一个jar ..比如说foo.jar 为了在hadoop中运行那个jar,我做到了 hadoop jar foo.jar org.foo.bar.MainClass input output 这开始了一个漫长的hadoop任务(比如几分钟). 工作正在运行.. hadoop给
我用hadoop api在 java编写了一个程序.所以,那个java代码的输出是一个jar ..比如说foo.jar

为了在hadoop中运行那个jar,我做到了

hadoop jar foo.jar org.foo.bar.MainClass input output

这开始了一个漫长的hadoop任务(比如几分钟).

工作正在运行.. hadoop给了我进步..喜欢

Map 0%,Reduce 0%
Map 20%,Reduce 0%
....

等等..
在作业结束后,hadoop吐出一堆统计信息(如输入大小,分割,记录等).
所有这些都是通过命令行完成的..

现在,我要做的是..从python调用这个程序(使用简单的系统执行..)

但我想要的是..当我运行这个python代码..我也想显示一些这些统计…但不是所有..

所以,我正在寻找的方法是捕获这些由jar执行显示的统计信息并在python中处理它并显示处理后的统计信息.

例如..默认情况下,hadoop向我展示..

Map 0%,Reduce 0%

等等..

也许我拥有的是……

def progress_function(map,reduce):

      return sum([map,reduce])/2.0

我在命令提示符下显示..

progress so far:0
progress so far:10

and so on..

这么长的故事简短..我有一个jar程序..当执行吐出一些统计数据..我想从python运行这个java jar …然后捕获这些统计数据…然后在python中修改它们将这些python统计信息显示给用户.

解决方法

出于多种原因,您希望将shell管道用于此类问题.它使设计视角更加灵活,从python调用进程可能很尴尬,更重要的是管道使python脚本在编程运行时很容易消耗输出.

hadoop jar foo.jar org.foo.bar.MainClass input output 2>&1 | python myscript.py

让myscript.py通过stdin获取输入,并通过print打印正常输出.

请注意,shell命令中的2>& 1将stderr重定向到stdout,因为管道从stdout而不是stderr移动输出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读