我正在开发一个项目,我想在Windows控制台或Linux终端中执行程序。
我没有启动新的控制台并在其中运行程序,而是希望执行以下操作:
rt.exec("cmd.exe /c start cmd.exe /k ruby rubycode.rb");
从这一点开始,我希望用户能够从GUI /我的程序中使用该程序。我的min中的想法是在静音模式下启动cmd,它不可见并锁定它。然后将控制台输出重定向到GUI,并让用户通过GUI将数据输入控制台。
类似的概念就是像jgrasp这样的大多数IDE。当您运行程序时,通过它们自己的命令提示符与它进行交互。
这是怎么做到的?我尝试从过程中抓取IOStreams并尝试至少打印出控制台输出但没有运气。
答案 0 :(得分:0)
以下是一个例子:
public class ProcessTest {
private Process p;
private BufferedReader reader;
private BufferedWriter writer;
public void start() throws IOException {
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir");
pb.directory(new File("./"));
this.p = pb.start();
this.reader = new BufferedReader(new InputStreamReader(this.p.getInputStream()));
this.writer = new BufferedWriter(new OutputStreamWriter(this.p.getOutputStream()));
new Read(this.reader).start();
}
public boolean writeToConsole(String s) throws IOException {
if (p == null)
return false;
this.writer.write(s + "\n");
this.writer.flush();
return true;
}
public class Read extends Thread {
private BufferedReader reader;
public Read(BufferedReader reader) {
this.reader = reader;
}
public void run() {
try {
String line;
while ((line = this.reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
new ProcessTest().start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用writeToConsole方法,您可以将任何字符串写入您执行的程序。