java - ProcessBuilder 在 Linux 但不能在 Windows 中工作
问题描述
echo
我有一个使用 运行命令的简单程序,ProcessBuilder
该程序在我的 Linux 机器上运行良好,但IOException
在 Windows 上运行时会抛出异常。
这是我的程序的简化版本。它将echo
andhello
作为 的参数ProcessBuilder
,然后将输出保存到字符串中并打印输出。在 Linux 中,输出为hello
,而在 WindowsIOException
中则捕获 an。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestPB {
public static void main(String[] args) throws InterruptedException {
ProcessBuilder pb = new ProcessBuilder("echo", "hello");
try {
Process process = pb.start();
BufferedReader readProcessOutput = new BufferedReader(new InputStreamReader(process.getInputStream()));
String output = "";
String line = "";
while ( (line = readProcessOutput.readLine()) != null) {
output += line;
output += System.getProperty("line.separator");
}
process.waitFor();
if(output.length() > 0) {
System.out.println(output.substring(0, output.length() -1));
} else {
System.out.println("No result");
}
} catch (IOException io) {
System.out.println("IOException thrown");
}
}
}
有谁知道为什么这在 Windows 中不起作用?
解决方案
echo
不是 Windows 上的程序,它是一个内部 shell 命令*,因此您需要调用命令行解释器:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "echo", "hello");
*) 参考:维基百科
推荐阅读
- c# - 您好,我如何将 && 添加到文本框和用户名和密码字符串,以及如何关闭第一个表单已编辑
- instagram - 用于发送和获取直接消息的 Instagram Api
- elixir - 包装长生不老药模块
- node.js - 如何将角度创建的数据存储到节点 js 中的文件中
- c# - 自适应卡中的输入值在提交按钮单击时被刷新
- python - 面临错误:anaconda 没有启动
- angular - Cloud Firestore 花费太多时间来获取数据
- ios - UIButton 标题文本选择特定文本并复制它
- vue.js - Highcharts Y轴需要在X轴上
- python - TF 2 Keras 模型基准测试与 JIT