繁体   English   中英

如何从node.js子进程使用CLI应用程序?

[英]How to use CLI application from node.js child process?

我在写文章如何使用来自node.js的命令行界面的应用程序。 这是node.js代码:

var spawn = require('child_process').spawn;
var child = spawn('java', ['HelloWorld']);

child.stdout.pipe(process.stdout);
child.stdin.write("tratata\r\n;");

child.stdin.end();

它运行Java HelloWorld CLI应用程序。

这是java代码:

import java.io.Console;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("started");

        Console console = System.console();

        while (true) {
            String s = console.readLine();
            System.out.println("Your sentence:" + s);
        }
    }
}

但这不起作用。 child.stdin.write执行时-没有任何反应。

免责声明:我对Java几乎一无所知。

我的猜测是java.io.Console所做的不只是读取stdin的内容,例如本身打开控制台设备(在大多数类似Unix的OS中为/dev/tty ),从而规避了stdin/stdout/stderr设备由Node传递。

如果使用java.io.BufferedReader ,则效果更好:

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

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("started");

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            try {
                String s = reader.readLine();
                if (s == null) return; // end of stream reached
                System.out.println("Your sentence:" + s);
            } catch(IOException e) {
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM