java - 试图在 Java 中将 Unix 命令的输出作为字符串返回......没有得到预期的结果
问题描述
我正在尝试用 Java 创建一个小程序,它允许我访问远程 Unix 服务器,运行一些命令,然后在 IDE 中显示这些命令的输出。
我一直在拼凑一些代码,并试图了解它是如何工作的,这可能并不理想!
目前,我能够从控制台运行命令,并且能够在服务器上看到结果,但我无法将输出发送回控制台。每当我尝试将它们作为字符串发回时,我都会得到类似于 java.lang.UNIXProcess$ProcessPipeInputStream@9x57d1ad 的内容,而不是我在服务器上看到的通常输出。我确信我做错了一些明显的事情,但我是一个初学者,尽管花了几个小时搜索我还没有找到解决方案。我真的很感激一些帮助。谢谢!
在服务器上运行:
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
if (inputLine.equals("storage")) {
runStorage();
printResults(runStorage()); }
catch (Exception e) {
e.printStackTrace();
}
public static Process runStorage() throws IOException {
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("df", "-h");
Process process = processBuilder.start();
printResults(process);
return process;
}
public static String printResults(Process process) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
return line; }
客户:
public class ClientInitiator {
public static void main(String[] args) throws IOException, InterruptedException {
String hostName = "myHostNameGoesHere";
Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out =
new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader(
new InputStreamReader(echoSocket.getInputStream()));
BufferedReader stdIn =
new BufferedReader(
new InputStreamReader(System.in));
{
String userInput;
while (!(userInput = stdIn.readLine()).equals("")) {
out.println(userInput);
if (userInput.equals("storage")) {
String serverResponse = in.readLine();
System.out.println(serverResponse);}
解决方案
为了获得正在运行的进程的输出,请尝试以下代码。
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);
}
推荐阅读
- javascript - 如何使用 data-url 打开下一个模式?
- java - Taskmanager 转储 - 可以使用 java/eclipse 内存分析器进行分析吗?
- php - 带有编程代码的文本区域内容未插入数据库
- reactjs - React Routes 受保护的路由
- javascript - 如何抑制错误:混合空格和制表符?
- android - 没有找到 dex 位置的原始 dex 文件
- rxjs - 订阅冷可观察的替代方案
- mongodb - 通过映射id排除行并通过映射名称在mongodb中获取记录
- php - 如何查询 Laravel Eloquent 的 belongsTo 关系?
- typescript - VSCode 一直抱怨导入“fs”节点模块