[英]How to open a program in CMD and interact with it with Java
我能够打开一些程序,该程序可以从cmd获取指令以执行某些操作,例如使用某些参数打开文件,检查其是否准备好,等等。
这就是我通过Java打开文件的方式。
final String location = "C:\\Program";
final File dir = new File(location);
String cmd = "cmd.exe /c start my-program.exe";
Process process = Runtime.getRuntime().exec(cmd, null , dir);
我现在如何与之交互 ,发送“ check_status”或“ do_some_stuff”之类的命令并将其输出到Java。
如果我尝试这样做:
String [] cmd = {"cmd.exe /c start my-program.exe", "do_stuff"};
Process process = Runtime.getRuntime().exec(cmd, null , dir);
我收到错误消息:“无法运行程序“ cmd.exe / c start my-program.exe.exe”(在目录“ C:\\ Program”中):CreateProcess错误= 2,系统找不到指定的文件”
但是当我发送单个String作为参数时,它确实会找到文件。
我了解可以通过以下方式将其输出到Java:
java.io.InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
编辑:通过使用getOutputStream解决。
Writer w = new OutputStreamWriter(process.getOutputStream());
w.write("custom_command");
w.close();
我使用standalone.bat文件(类似.exe文件)启动了Wildfly服务器
public static void main(String[] args) throws IOException {
ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "cd D:\\Users\\turack\\Downloads\\wildfly-16.0.0.Final\\bin\\ && standalone.bat");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while (true) {
line = bufferedReader.readLine();
if (line == null) { break; }
System.out.println(line);
}
bufferedReader.close();
}
通过使用getOutputStream解决。
Writer w = new OutputStreamWriter(process.getOutputStream());
w.write("custom_command");
w.close();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.