我正在编写一个servlet来运行终端命令,我必须在同一个终端上一个接一个地运行三个命令。 当我使用如下所示的exec时,我能够得到单个命令的结果,
Runtime rt = Runtime.getRuntime();
process proc = rt.exec("zsh");
但是当我试图跑步时,
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("zsh", "source ./myenv/bin/activate", "python runner.py");
它显示警告(不执行),如下所示,
The method exec(String, String[], File) in the type Runtime is not applicable for the arguments (String, String, String).
我也试过运行三个不同的exec命令,但它们不是在同一个序列和同一个终端上发生的,我该怎么办才能让上面三个命令顺序在同一个终端上运行并给我输出在第三个命令之后?
我打算运行的三个命令是, zsh 2. source ./myenv/bin/activate 3. python runner.py 所有这三个必须以相同的顺序一个接一个地执行。
答案 0 :(得分:0)
exec采用String []而不是varargs列表,因此您需要运行:
Process proc = rt.exec(new String[] {"zsh", "source ./myenv/bin/activate",
"python runner.py"}, null, new File("parentdirectoryofmyenv"));
如图所示,您还需要包含流程的工作目录,否则它将无法找到“./myenv”。
编辑:
进一步简化这一点。我假设“source ./myenv/bin/activate”正在为进程设置环境。这可以按如下方式完成:
Process proc = rt.exec(
new String[] {"python", "runner.py"},
new String[] {"ENV1=VAL1", "ENV2=VAL2"},
new File("parentdirectoryofrunnerpy"));