gpt4 book ai didi

java - 将更多动态运行时参数传递给 NodeJS 子进程

转载 作者:行者123 更新时间:2023-12-02 02:13:57 26 4
gpt4 key购买 nike

我想使用 NodeJS 子进程运行 Java 程序。

const util = require('util');
const exec = util.promisify(require('child_process').exec);

let dir = `${__dirname}/runtime/java/main`;

await exec(`javac Test.java`, {cwd: dir});
const { stdout, stderr } = await exec(`java Test`, {cwd: dir});

我的 Java 代码动态获取多个扫描器运行时参数:

import java.util.Scanner; 

class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter number of test cases");

int count = scanner.nextInt();
for(int i=0; i<count; i++){
String testCaseDescription = scanner.nextLine();
System.out.println("Test case " + i + " is "+testCaseDescription);
}

}
}

如何将动态运行时参数传递给子进程?

最佳答案

根据 documentation child_process.exec() 中,赋予该函数的第一个参数是“要运行的命令,参数以空格分隔”。

因此,我们需要获取提供给 Node.js 脚本的命令行参数,并将它们传递给 exec()。在 Node.js 中,我们可以通过 process.argv 属性获取这些参数(更多信息 here )。

process.argv 是一个数组,您需要排除第一个元素(这是执行文件的 Node.js 运行时的路径)以及第二个元素(这是Node.js 脚本的路径)。您可以使用 slice() method仅获取您想要的数组部分。

然后,您需要将数组(减去前两个元素)转换为空格分隔的字符串。您可以使用 join() method 来完成此操作.

最终结果如下所示:

const util = require('util');
const exec = util.promisify(require('child_process').exec);

async function run() {
const dir = `${__dirname}/runtime/java/main`;
await exec(`javac Test.java`, {cwd: dir});

// Transforming the CLI arguments into a comma-separated string
const cliArguments = process.argv.slice(2).join(' ');
// Executing and passing the CLI arguments
const { stdout, stderr } = await exec(`java Test ${cliArguments}`, {cwd: dir});
}

run();

关于java - 将更多动态运行时参数传递给 NodeJS 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57313885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com