从python执行和捕获java执行的输出
我用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% .... 等等.. 现在,我要做的是..从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移动输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |