2013-09-02 1 views
0

Мне нужно получить доступ к консоли на узле через java , как это сделать?как выполнять команды консоли в java-программе для узла

public class Comando { 

public static void main(String[] args) { 
    String comando = "C:\\Program Files\\nodejs\\node.exe"; 
    try { 
     Process process = Runtime.getRuntime().exec(comando); 
     OutputStream stdin = process.getOutputStream(); 
     InputStream stderr = process.getErrorStream(); 
     InputStream stdout = process.getInputStream(); 


     stdin.write("1+2".getBytes()); 
     stdin.flush(); 
    // System.out.print(stdout.read()); 
     stdin.close(); 
     System.out.print(stdout.read()); 

     //BufferedReader reader = new BufferedReader (new InputStreamReader(stdout)); 
     //BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin)); 

     // writer.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
} 
+0

Может быть, это поможет вам http://docs.oracle.com/javase/6/docs/api/java/lang/ ProcessBuilder.html –

+0

Прочитайте (и реализуйте) * все * рекомендации [Когда Runtime.exec() не будет] (http://www.javaworld.com/jw-12-2000/jw-1229-traps.html). Это может решить проблему. Если нет, он должен предоставить дополнительную информацию о причине отказа. Затем проигнорируйте, что он ссылается на 'exec' и создает' Process' с помощью 'ProcessBuilder'. Также разбивайте 'String arg' на' String [] args' для учета аргументов, которые сами содержат пробелы. –

+0

, когда я реализую System.out.print (stdout.read()); программа возвращает меня-1 – user2740119

ответ

0

Я ожидаю, что node.exe требует текст, а не двоичную, как вы используете его.

Это означает, что использование шрифтов PrintWriter для написания строк текста и BufferedReader для чтения строк текста имеет смысл.

Java имеет встроенный интерпретатор Javascript. Я предполагаю, что вы не можете использовать это по какой-то причине.

+0

Мне нужен способ выполнить узел на Java и выполнить операции, есть ли? – user2740119

+0

@ user2740119 Вы можете, если будете следовать моим предложениям. –

0
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.PrintWriter; 

public class Comando { 

    public static void main(String[] args) { 

     String comando = "C:\\Program Files\\nodejs\\node.exe"; 
     try { 

      ProcessBuilder builder = new ProcessBuilder(comando); 
      Process process = builder.start(); 
      OutputStream stdin = process.getOutputStream(); 
      InputStream stderr = process.getErrorStream(); 
      InputStream stdout = process.getInputStream(); 

      BufferedReader reader = new BufferedReader(new InputStreamReader(
        stdout)); 
      PrintWriter writer = new PrintWriter(stdin); 

      writer.write("1+2"); 
      writer.flush(); 
      stdin.close(); 
      System.out.print(reader.read());// return -1 

      // writer.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

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