我正在使用流程构建器从我的java代码运行一个名为“fio”的工具。该工具在Ci中的源代码需要从“fio”的源代码获取某些变量的值,当我运行该工具时在我的java代码中。我试图搜索解决方案,但找不到任何。 我怎么能这样做?可以为环境变量提供帮助吗? 这是我正在使用的代码
String line=null;
ProcessBuilder pb=new ProcessBuilder("fio","inp.fio");
File f=new File("/home/nikhil/Nikhil");
pb.directory(f);
Process p=pb.start();
InputStream i=p.getInputStream();
InputStreamReader ir=new InputStreamReader(i);
BufferedReader bf=new BufferedReader(ir);
InputStream err=p.getErrorStream();
InputStreamReader rerr=new InputStreamReader(err);
BufferedReader bferr=new BufferedReader(rerr);
答案 0 :(得分:2)
我将假设您可以访问fio的代码并可以重建它。您可以使用的一种机制是让fio将您感兴趣的局部变量状态输出到您正在处理的输出流(stdout或stderr)之一,并在每次更改和fio输出时将值作为消息解析出来更新的值。这使沟通变得相当简单。
如果您有大量复杂数据,则可能需要考虑为共享状态创建单独的通信通道(例如,共享内存,或命名管道或基于套接字的连接)。如果你只是对一些便宜的调试感兴趣,我只需要输出类似
的第一种方法DBG {VAR1} =<值GT;
每当感兴趣的值发生变化时,到stderr,并让你的Java中的stderr流处理程序记录状态,以便在需要的地方使用。
答案 1 :(得分:0)
我可以使用"共享内存"与我写的另一个新的C程序共享变量值,现在我可以从这个新的C程序中调用一个函数,它将返回变量的值,即" shared"在我使用JNI的java代码中。