首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >servlet多个exec命令

servlet多个exec命令
EN

Stack Overflow用户
提问于 2014-02-10 08:54:54
回答 1查看 280关注 0票数 0

我正在编写一个servlet来运行终端命令,我必须在同一个终端上一个接一个地运行三个命令。当我使用exec时,如下面所示,我能够获得单个命令的结果,

代码语言:javascript
复制
Runtime rt = Runtime.getRuntime();
process proc = rt.exec("zsh");

但当我试图逃跑时,

代码语言:javascript
复制
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("zsh", "source ./myenv/bin/activate", "python runner.py");

它显示警告(不执行)如下,

代码语言:javascript
复制
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 --所有这三个命令都必须以相同的顺序依次执行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-10 09:30:58

exec使用的是String[]而不是varargs列表,因此您需要运行:

代码语言:javascript
复制
Process proc = rt.exec(new String[] {"zsh", "source ./myenv/bin/activate", 
    "python runner.py"}, null, new File("parentdirectoryofmyenv"));

如图所示,您还需要包含流程的工作目录,否则它将无法找到"./myenv“。

编辑:

进一步简化这一点。我假设"source ./myenv/bin/activate“正在设置进程的环境。这样做的办法如下:

代码语言:javascript
复制
Process proc = rt.exec(
     new String[] {"python", "runner.py"}, 
     new String[] {"ENV1=VAL1", "ENV2=VAL2"}, 
     new File("parentdirectoryofrunnerpy"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21672602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档