2014-02-10 4 views
0

Я пишу сервлет для запуска команд терминала, я должен запускать три команды один за другим на том же терминале. Когда я использую Exec, как показано ниже, я могу получить результат для одной команды,Сервлет несколько команд 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, но они не происходят в той же последовательности и в том же терминале, что я должен сделать, чтобы сделать выше THRE e для запуска на одном и том же терминале последовательно и дать мне результат после третьей команды?

три команды, которые я намерен для запуска являются, 1. ЗШ 2. Источник ./myenv/bin/activate 3. Python runner.py все три должны быть выполнены один за другим в той же последовательности ,

+0

Можете ли вы создать сценарий, содержащий три команды и выполнить его? – hmjd

+0

не является исполняемым, он дает описанное выше предупреждение. –

ответ

0

Exec принимает String [] не список списков параметров, так что вам нужно запустить:

Process proc = rt.exec(new String[] {"zsh", "source ./myenv/bin/activate", 
    "python runner.py"}, null, new File("parentdirectoryofmyenv")); 

Как показано также необходимо включить в рабочий каталог для процесса или он не будет в состоянии найти " ./myenv».

EDIT:

Упрощение этого дальше. Я предполагаю, что «source ./myenv/bin/activate» устанавливает среду для процесса. Это можно сделать следующим образом:

Process proc = rt.exec(
    new String[] {"python", "runner.py"}, 
    new String[] {"ENV1=VAL1", "ENV2=VAL2"}, 
    new File("parentdirectoryofrunnerpy")); 
+0

все еще получает ошибку ", zsh: невозможно открыть входной файл: source ./myenv/bin/activate"..Команды работают нормально, когда я выполнил их с терминала. –

+0

Возможно, вы используете его в неправильном рабочем каталоге. Я обновил ответ, чтобы показать, как добавить рабочий каталог. – mikea

+0

Nah! Я только что выполнил pwd из своего сервлета, чтобы подтвердить его. –

Смежные вопросы