打印可执行文件的 return 值
Println the return values of an executable
我已将 matlab .m 文件部署到 windows 控制台应用程序中。我部署的 matlab 文件实际上是一个没有参数和 return 整数列表的 matlab 函数。我正在 运行 将 java 代码中的 .exe 使用过程 运行 我的可执行文件。我尝试使用以下代码读取 return 值:
Process process = Runtime.getRuntime().exec("epidemic.exe");
//process.waitFor();
System.out.println("....");
InputStream in = process.getInputStream(); // To read process standard output
InputStream err = process.getErrorStream(); // To read process error output
while (process.isAlive()) {
while (in.available() > 0 || err.available() > 0) {
if (in.available() > 0) {
System.out.print((char)in.read()); // You might wanna echo it to your console to see progress
}
if (err.available() > 0) {
err.read(); // You might wanna echo it to your console to see progress
}
}
Thread.sleep(1);
}
System.out.println("....");
编辑:根据提议的更改,我重新更改了我的代码。同样,它似乎没有打印 returned 值。如果这段代码没问题,我如何检查可执行文件是否确实 return 值?
您的 while
循环尝试从启动进程的 标准输出 中读取 整行 。
我强调了潜在的问题。如果进程没有写入整行,或者它写入了它的标准错误,例如,reader.readLine()
将永远阻塞。
另请注意,一个进程有 2 个输出流:标准输出和标准错误。两者都有一个缓冲区,如果其中任何一个在您未读取的情况下被填满,则在尝试写入更多输出时该过程将被阻止。
为了确保进程不被阻塞,您必须读取它的两个输出流,这里是一个如何做到这一点的例子:
InputStream in = process.getInputStream(); // To read process standard output
InputStream err = process.getErrorStream(); // To read process error output
while (proc.isAlive()) {
while (in.available() > 0 || err.available() > 0) {
if (in.available() > 0)
in.read(); // You might wanna echo it to your console to see progress
if (err.available() > 0)
err.read(); // You might wanna echo it to your console to see progress
}
Thread.sleep(1);
}
如果你想打印从进程的输出流中读取的数据,你可以这样做:
System.out.print((char)in.read()); // read() returns int, convert it to char
我已将 matlab .m 文件部署到 windows 控制台应用程序中。我部署的 matlab 文件实际上是一个没有参数和 return 整数列表的 matlab 函数。我正在 运行 将 java 代码中的 .exe 使用过程 运行 我的可执行文件。我尝试使用以下代码读取 return 值:
Process process = Runtime.getRuntime().exec("epidemic.exe");
//process.waitFor();
System.out.println("....");
InputStream in = process.getInputStream(); // To read process standard output
InputStream err = process.getErrorStream(); // To read process error output
while (process.isAlive()) {
while (in.available() > 0 || err.available() > 0) {
if (in.available() > 0) {
System.out.print((char)in.read()); // You might wanna echo it to your console to see progress
}
if (err.available() > 0) {
err.read(); // You might wanna echo it to your console to see progress
}
}
Thread.sleep(1);
}
System.out.println("....");
编辑:根据提议的更改,我重新更改了我的代码。同样,它似乎没有打印 returned 值。如果这段代码没问题,我如何检查可执行文件是否确实 return 值?
您的 while
循环尝试从启动进程的 标准输出 中读取 整行 。
我强调了潜在的问题。如果进程没有写入整行,或者它写入了它的标准错误,例如,reader.readLine()
将永远阻塞。
另请注意,一个进程有 2 个输出流:标准输出和标准错误。两者都有一个缓冲区,如果其中任何一个在您未读取的情况下被填满,则在尝试写入更多输出时该过程将被阻止。
为了确保进程不被阻塞,您必须读取它的两个输出流,这里是一个如何做到这一点的例子:
InputStream in = process.getInputStream(); // To read process standard output
InputStream err = process.getErrorStream(); // To read process error output
while (proc.isAlive()) {
while (in.available() > 0 || err.available() > 0) {
if (in.available() > 0)
in.read(); // You might wanna echo it to your console to see progress
if (err.available() > 0)
err.read(); // You might wanna echo it to your console to see progress
}
Thread.sleep(1);
}
如果你想打印从进程的输出流中读取的数据,你可以这样做:
System.out.print((char)in.read()); // read() returns int, convert it to char