如何从java运行python脚本?

我有这个java应用程序并遇到了解析STDF的要求。

实际上我只需要获取stdf文件的FAR,MIR和MRR部分。 sourceforge上存在一个stdf4j,但由于缺少文档,我无法使用它。

解决方法是使用用python编写的stdfparser并且相对更直接并且更容易完成工作,实际上我已经修改了以满足我的需求。

所以现在我只需要详细调用这个脚本并用Java读取生成的文件,然后继续使用现有的应用程序。

问题是在使用时:

Process p = r.exec("cmd /c python parser.py sample_data.std.gz -v test.txt"); 

生成的文本文件始终为空。 (请注意,我已经在实际命令行上运行了这个并成功检索了我需要的内容。)

有什么我错过了,或者有更好的选择。 (我试图避免使用jython,因为我无法在生产环境中安装它。)

你应该调用p.waitFor(); 这样,在外部进程完成执行之后,Java程序才会继续运行。

更新1:还要确保从p.getErrorStream()p.getInputStream()中读取所有字节。 如果不这样做可能会导致流程停滞不前。

更新2:您可能还需要检查错误代码的进程返回代码。 通过waitFor()的返回值访问进程返回码。

除了确保调用p.waitFor() ,您还可能必须阅读流的内容。 如果未读取流,则进程将停止。

尝试添加此类: http : //www.physionet.org/physiotools/puka/sourceCode/puka/StreamGobbler.java

并称之为:

  new StreamGobbler(p.getErrorStream(), "Error"); new StreamGobbler(p.getInputStream(), "Input"); 

你可能能够自己想出一个更高效的课程,但那个课程至少应该给你一个基本的想法(注意它不是我写的)。

尝试创建cmd文件,然后使用Java调用它。