【发布时间】:2017-06-30 13:36:03
【问题描述】:
我对此进行了相当多的研究,但遗憾的是无法找到适合我目前遇到的问题的答案。
我的问题并不像“如何从 Java 运行 python 脚本”那么简单,至少存在 10 个包含相同答案的线程。我明白该怎么做。我的问题如下:
我有一个 .py 文件 (gui.py),它看起来像这样:
#!/usr/bin/env python
import matplotlib.pyplot as plt
import copy
import math
import numpy as np
class GUI(object):
...
...
...
if __name__ == '__main__':
GUI.run()
这个 gui 是一个交互式 matplotlib 图,用户可以在上面绘制东西。细节并不重要——底线是只要 matplotlib 窗口打开,脚本就会运行。
现在,我正在旁边构建一个 Java 应用程序,并且有一个按钮,单击该按钮会创建一个 Java Process 对象,该对象将调用该脚本。我从其他帖子中了解到,无法从 java 运行时调用 PIPE,因此我创建了一个 .sh 文件,该文件环绕着这个 python 脚本。
shell.sh:
#!/bin/sh
python /mypath/to/the/gui.py
调用shell脚本的Java:
view.getLaunchGuiButton().addActionListener((e) -> {
try {
String[] prcArgs = new String[] { "/mypath/to/shell.sh" };
Process proc = Runtime.getRuntime().exec(prcArgs);
} catch (IOException e1 ) {
e1.printStackTrace();
}
});
shell 脚本是正确的 - 当我从终端正确运行它时,一切都正常运行。
我知道 Java 确实在执行 shell 脚本,并调用 python 脚本。没有错误。我没有设置任何BufferedReader,因为没有什么可阅读的 - 我只需要 GUI 即可打开。我认为问题在于,一旦执行了 shell,Runtime 打开的所谓“终端”会立即关闭,因此它会杀死 python 脚本,从而杀死 GUI。
我的问题是,如何防止 Runtime 简单地运行并立即终止 python 脚本(也就是关闭终端)?
我已经做过的事情:
chmod +x ../../shell.sh- 尝试在 shell 脚本中使用
nohup /call/python/here &。没用。 - 尝试使用 Java 的
ProcessBuilder而不是Runtime。没有区别。
有什么想法吗?提前谢谢大家。
【问题讨论】:
标签: java python matplotlib processbuilder runtime.exec