我正在编写一个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 --所有这三个命令都必须以相同的顺序依次执行。
发布于 2014-02-10 09:30:58
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"));https://stackoverflow.com/questions/21672602
复制相似问题