从Java到命令行的任务完成信号
我正在从事一个使用Java的项目,但有一个使用Py4J实现的Python包装器。为了使其正常工作,我需要首先使用正确的命令行参数运行Java服务器(称之为从Java到命令行的任务完成信号,java,signals,autohotkey,py4j,Java,Signals,Autohotkey,Py4j,我正在从事一个使用Java的项目,但有一个使用Py4J实现的Python包装器。为了使其正常工作,我需要首先使用正确的命令行参数运行Java服务器(称之为Main.Java),一旦服务器初始化,我需要在其上运行我自己的Python脚本(称之为script.py) Main.java是我想要发出初始化完成信号的地方: public class Main { ... public void initialize() { // Server initializati
Main.Java
),一旦服务器初始化,我需要在其上运行我自己的Python脚本(称之为script.py
)
Main.java
是我想要发出初始化完成信号的地方:
public class Main {
...
public void initialize() {
// Server initialization code
signalInitializationDone();
}
}
目前,我只使用以下AHK脚本Run.AHK
:
Run, javaw Main --py4j
Sleep, 2000
Run, python .\python\Script.py
但这当然只在初始化在2秒内完成时有效,如果初始化更快完成,它也会不必要地空转。我希望有一个解决方案,在Main.initialize()完成后立即运行Script.py
我不能做的一件事是:
public void initialize() {
// Server initialization code
Runtime.getRuntime().exec("python .\python\Script.py");
}
或者从Java应用程序内部对python脚本进行类似的直接调用,因为同一服务器也可以与其他脚本一起运行,甚至可以作为独立脚本运行
我也不是一成不变地使用AHK,任何工作解决方案(AHK、Batch、Python、Java)都可以。您可以使用表示要运行的脚本或无脚本的字符串参数化Java应用程序的初始化,并仍然从Java调用它。然后通过注入参数将其封装在py4j脚本中。是否尝试运行等待?或者,您可以捕获OutputVarPID和查询进程(大约每四分之一秒),以查看它何时显示。最后,服务器初始化能否抛出一个对话框?然后AHK可以查找WinActive等。添加额外的参数可能很棘手-Java应用程序实际上不是我的,我希望尽可能少地编辑它。RunWait的问题是,服务器进程在初始化之后会继续运行,而查询进程名或PID是有问题的,因为java进程出现在初始化之前。对话的想法可能行得通,如果找不到更好的方法,我会试试。