gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:23:30 26 4
gpt4 key购买 nike

我使用 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%
Map 20%, 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 java 程序..执行时会吐出一些统计数据..我想从 python 运行这个 java jar..然后捕获这些统计数据...然后修改它们在 python 中并将这些 python 统计信息显示给用户。

最佳答案

出于多种原因,您想使用外壳管道来解决此类问题。从设计角度来看,它使它更加灵活,从 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 移动输出。

关于java - 从 python 执行和捕获 java 执行的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19536717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com