如何从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调用它。