【问题标题】:how to execute console commands in a java program for node如何在节点的java程序中执行控制台命令
【发布时间】:2013-09-02 14:19:05
【问题描述】:

我需要通过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();  
    }  
}
}

【问题讨论】:

  • 阅读(并实施)所有 When Runtime.exec() won't 的建议。那可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用exec 并使用ProcessBuilder 构建Process。还要将String arg 分解为String[] args 以说明本身包含空格的参数。
  • 当我实现 System.out.print(stdout.read());程序返回 me-1

标签: java node.js process cmd runtime.exec


【解决方案1】:

我希望node.exe 需要文本,而不是您使用的二进制文件。

这意味着使用 PrintWriter 写入文本行并使用 BufferedReader 读取文本行会更有意义。

Java 有一个内置的 Javascript 解释器。我假设您由于某种原因不能使用它。

【讨论】:

  • 我需要一种在 Java 上执行节点并执行操作的方法,有吗?
  • @user2740119 如果您听从我的建议,您可以。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2016-05-20
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    相关资源
    最近更新 更多