gpt4 book ai didi

java - 在 Java 中执行命令

转载 作者:行者123 更新时间:2023-12-01 09:29:31 25 4
gpt4 key购买 nike

我正在尝试编写一个可以从命令行执行vagrantJava类:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;

public class Hello {

public static void deploy() {
String path = System.getProperty("user.home") + "/ansible/solr/";
try {
String command = "vagrant up";
ProcessBuilder builder = new ProcessBuilder(command);
System.out.println("------------------------------------------------");
System.out.println("Executing " + command + " in directory " + path);
System.out.println("Current path: " + Paths.get(".").toAbsolutePath().normalize().toString());
builder.directory(new File(path));
Process child = builder.start();
watch(child);
System.out.println("------------------------------------------------");
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}

private static void watch(final Process process) {
new Thread() {
@Override
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
try {
System.out.println("------------------------------------------------");
System.out.println("Executing Ansible");
while ((line = input.readLine()) != null) {
System.out.println(line);
}
System.out.println("------------------------------------------------");
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}.start();
}

public static void main(String[] args) {
deploy();
}
}

/ansible/solr 目录中我有:

-rw-r--r--  1 ubuntu  staff   2.1K Sep 17 08:36 README.md
-rw-r--r-- 1 ubuntu staff 840B Sep 17 08:36 Vagrantfile
drwxr-xr-x 4 ubuntu staff 136B Sep 17 08:36 provisioning/
-rw-r--r-- 1 ubuntu staff 80B Sep 17 08:36 requirements.yml

并且目录/home/ubuntu/ansible/solr显然存在。当我执行上面的程序时,我得到:

------------------------------------------------
Executing vagrant up in directory /home/ubuntu/ansible/solr
Current path: /home/ubuntu
Cannot run program "vagrant up" (in directory "/home/ubuntu/ansible/solr"): error=2, No such file or directory

为什么我会收到此错误?

最佳答案

根据 ProcessBuilder 注释,您应该将命令及其参数分开:

/**
* Constructs a process builder with the specified operating
* system program and arguments. This is a convenience
* constructor that sets the process builder's command to a string
* list containing the same strings as the {@code command}
* array, in the same order. It is not checked whether
* {@code command} corresponds to a valid operating system
* command.
*
* @param command a string array containing the program and its arguments
*/
public ProcessBuilder(String... command) {
this.command = new ArrayList<>(command.length);
for (String arg : command)
this.command.add(arg);
}

所以尝试一下:

ProcessBuilder builder = new ProcessBuilder("vagrant", "up");

关于java - 在 Java 中执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39561040/

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