我正在尝试从我的Java程序启动一个python脚本--这个python脚本监听来自Java程序的套接字连接,并用数据进行响应。为此,我尝试使用ProcessBuilder API:
public class MLClassifierProcess{
//bash location //activate python venv //python interpreter //script
final String[] command_to_run = new String[] { "/bin/bash", "-c", "/env/bin/activate;", "/env/bin/python","predictprobability.py;" };
public void startML(){
ProcessBuilder builder = new ProcessBuilder(command_to_run);
Process pr = null;
try {
pr = builder.start();
} catch (IOException ioException) {
System.out.println("error");
}
}
public static void main(String[] args){
MLClassifierProcess p = new MLClassifierProcess();
p.startML();
}
}
但是,当脚本predictprobability.py应该无限期地继续运行时,运行main函数就会立即终止。我是ProcessBuilder API的新手,因此如果您提供有关如何继续的任何指示,将非常感谢
如果您的Java程序退出,那么您启动的Python进程将退出,并且当父进程死亡时子进程也会被杀死,除非它们已经与该进程分离。
如果您希望您的Java程序一直运行到Python程序完成执行,那么您需要让Java代码适当地等待。以下是如何让它这样做:
public class MLClassifierProcess{
//bash location //activate python venv //python interpreter //script
final String[] command_to_run = new String[] { "/bin/bash", "-c", "/env/bin/activate;", "/env/bin/python","predictprobability.py;" };
public Process startML(){
ProcessBuilder builder = new ProcessBuilder(command_to_run);
Process pr = null;
try {
pr = builder.start();
} catch (IOException ioException) {
System.out.println("error");
}
return pr;
}
public static void main(String[] args){
MLClassifierProcess p = new MLClassifierProcess();
Process pr = p.startML();
if (pr != null)
pr.waitFor();
}
}
问题内容: 我想在我的Java程序中执行shell脚本,并传递如下所示的参数: 然后test.sh将调用另一个传递字符串参数的java程序,如下所示: 最后程序anther.jar将以这种格式解释参数 我对此感到有些困惑,因为在这种情况下我无法正确处理转义字符。 我在第一个命令中尝试了一些字符串格式,但没有获得正确的格式。 一些帮助就可以了! 谢谢! 问题答案: 我认为您最好使用 exec(Str
问题内容: 我尝试谷歌搜索答案,但没有运气。 我需要使用我的超级计算机服务器,但是要运行我的python脚本,必须通过shell脚本执行。 例如我要执行 如何做到这一点? 问题答案: 只需确保python可执行文件在PATH环境变量中,然后在脚本中添加 细节: 在文件job.sh中,放入 执行此命令以使脚本可运行: 运行 :
协同程序 当调用一个函数时,在它返回之前,会一直运行到完成。这意味着该函数中的任何动作都必须在一帧内完成;函数调用不能包含过程动画或一段时间内的事件序列。例如有这样一个任务,逐渐降低一个对象的 alpha(不透明度)值,直到它完全不可见。 void Fade() { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = rend
问题内容: 我正在尝试从CGI脚本启动后台进程。基本上,提交表单时,CGI脚本将向用户指示他或她的请求正在处理中,而后台脚本则进行实际处理(因为该处理往往会花费很长时间。)我面临的问题是Apache不会在子脚本终止之前将父CGI脚本的输出发送到浏览器。 一位同事告诉我,我想做的事情是不可能的,因为无法阻止Apache等待CGI脚本的整个过程树消失。但是,我在网络上也看到了很多关于“双叉”技巧的参考
问题内容: 我在String变量中有一个Rscript,我想从Java程序执行它并将一些变量传递给它。如果我独立执行该R脚本,则可以正常工作。我已通过使用Python程序将所有脚本转义,从而将该R脚本转换为一行,如下所示: 我将打印出的字符串用完,并将其存储在String变量中,然后使用以下代码执行,但它根本不起作用。我正在传递和可变到上述R脚本。 上面的代码可以与bash shell脚本一起正常
这是我在我的 问:是否有可能在此之前简单地执行另一个脚本,而不必编写额外的脚本? 伪代码: 而不是: