2016-06-10 2 views
1

Я пытаюсь выполнить некоторые операции с командной строкой через JAVA. Одна из моих команд требует ввода для завершения. Я не знаю, как пройти через java в середине выполнения команды.CMD операции через Java

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class CommandLineMethods { 
public static String executeCommand(String []command) 
{ 
    StringBuffer output = new StringBuffer(); 
    Process p; 
    try{ 

       p=Runtime.getRuntime().exec(command); 

     p.waitFor(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line = ""; 
     while((line=br.readLine())!=null) 
     { 
      output.append(line + "\n"); 
     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return output.toString(); 
} 
public static void main(String...args) 
{ 
    String scriptsPath ="C:\\bip_autochain\\win64_x64\\scripts"; 
    String scriptName="lcm_cli.bat"; 
    String scriptArguments="lcmproperty C:\\TestNG_Auto\\resources\\LCMBiar_Import.property"; 

    String []command = {"cmd.exe", "/c"," cd "+scriptsPath+" && "+ scriptName +" -"+scriptArguments}; 
    String res = executeCommand(command); 
    System.out.println(res); 

} 

} 

Последняя команда, выполняющая скрипт с некоторым аргументом, требует ввода для завершения. Как добиться этого?

+0

попытка дать a '\ n', когда он запрашивает ввод. – bhansa

+0

no it ничего не печатаю! Он ждет выполнения команды полностью перед печатью. но для этого требуется ввести между –

+0

Возможный дубликат [Нажмите клавишу с Java] (http://stackoverflow.com/questions/11442471/press-a-key-with-java) – bhansa

ответ

0

Похоже, что вам нужно создать Thread и отправить его внутри. Для простой координации просто отправьте ребенка спать.

+0

привет, я не очень хорошо разбираюсь в потоках, если вы можете указать мне пример или что-то, что оно будет помогите много –

+0

http://stackoverflow.com/questions/2531938/java-thread-example – malarres

0

Вы можете получить ручку на OutputStream для Process и отправить свою команду таким образом. Это может занять некоторое рефакторинг кода, так что вы можете отправить команду в нужное время (может быть, когда вы видите что-то, в частности, на InputStream, но что-то вроде этого:

Process process = Runtime.getRuntime().exec(command) 
// ... stuff happens, reading the input maybe 
OutputStream out = process.getOutputStream(); 
out.write("\n"); 
out.close(); 

Там есть несколько предостережений, когда вы взаимодействуете с Process, особенно в отношении оперативного считывания выходных и ошибок потоков, а также с использованием потоков, так что вы можете прочитать их обоих в то же время иметь возможность взглянуть на эту статью для некоторых советов:.

http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html

+0

Я дал thread.sleep (10000), чтобы команда могла достигать в нужное время, но метод out.write не принимает string в качестве входных данных это либо int, либо массив байтов. поэтому я попытался преобразовать «\ n» в массив байтов и передать его методу out.write. Это не сработало, моя программа все еще застряла. –

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