Java servlet多个exec命令

Java servlet多个exec命令,java,python,servlets,terminal,Java,Python,Servlets,Terminal,我正在编写一个servlet来运行终端命令,我必须在同一个终端上一个接一个地运行三个命令。 如下图所示,当我使用exec时,我能够获得单个命令的结果 Runtime rt = Runtime.getRuntime(); process proc = rt.exec("zsh"); 但当我试图逃跑时 Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("zsh", "source ./myenv/bin/activate", "py

我正在编写一个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命令,但它们不会以相同的顺序在同一个终端上运行,我应该如何使上述三个命令在同一个终端上顺序运行,并在第三个命令后给我输出

我打算运行的三个命令是, 1.zsh 2.source./myenv/bin/activate 3.python runner.py
所有这三个命令必须以相同的顺序依次执行。

exec使用字符串[],而不是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"));

你能创建一个包含这三个命令的脚本并执行它吗?它不是可执行的,它给出了上述警告。仍然会出现错误,“zsh:无法打开输入文件:source./myenv/bin/activate”。当我从终端执行命令时,这些命令似乎工作正常。你可能在错误的工作目录中运行它。我已经更新了答案,以显示如何添加工作目录。不!我刚刚从我的servlet中执行了pwd来确认它。我也尝试了新的编辑,但仍然存在相同的错误。您现在得到的错误是什么。如果删除了对./myenv/bin/activate的使用,则不会出现相同的错误