gpt4 book ai didi

java - 无法使用 Java 程序从控制台中提取字符串

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:24 25 4
gpt4 key购买 nike

我有代码段:

public static void getOS() throws IOException, InterruptedException
{
String[] cmd = {"cat", "/etc/*-release"};
Process proc = rt.exec(cmd);
VerboseMode.verboseOut(cmd,proc);

BufferedReader is = new BufferedReader(new InputStreamReader(proc.getInputStream()));
line = is.readLine();
OS = line.trim();
}

在一个曾经工作的程序中,但由于某种原因停止了。如果我从终端运行 cat/etc/*-release 我会得到结果,但是从 java 我得到 null。缺少什么?

已修复。

我删除了将输出定向到控制台而不是行变量的详细模式行,并更改了 cmd 字符串的格式:

public static void getOS() throws IOException, InterruptedException
{
String[] cmd = {"/bin/sh","-c","cat /etc/*-release" };
Process proc = rt.exec(cmd);

BufferedReader is = new BufferedReader(new InputStreamReader(proc.getInputStream()));
line = is.readLine();
OS = line.trim();
}

一定是我改了忘记了。但是对于我自己的信息,上面显示的两个 cmd 字符串之间有什么区别,以及我是否将它作为字符串与 string[] 传递。据我了解,字符串可能并不总是有效,但字符串 [] 会。但是/bin/sh -c 部分我不确定,只是之前在其他 S.O. 在线看到过。线程。

最佳答案

在字符串中你可以提供你正在通过终端运行的脚本

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Multipleprocess {

public static void main(String[] args)throws Exception {
int process=0;
String s[]={"/bin/sh","-c","cat /etc/*-release" };
Process p=Runtime.getRuntime().exec(s);
BufferedReader proc=new BufferedReader(new InputStreamReader(p.getErrorStream()));
BufferedReader pout=new BufferedReader(new InputStreamReader(p.getInputStream()));
// We read stderror first from String because it spits the progress information
//into stderr

for (String s1=proc.readLine(); s1!=null; s1=proc.readLine())
{
process++;
System.out.println("Stderr from p: "+s);
}
for (String s1=pout.readLine(); s1!=null; s1=pout.readLine())
{
process++;
System.out.println("Stdout from p: "+s);
}

//how many process have completed check here
System.out.println("process have completed"+process);
// if you need to check whether the command actually returned normally

int returnCode = p.waitFor();
proc.close();
pout.close();

System.out.println("Process exited with return code "+returnCode);
}
}

我已经检查了我的程序在我的 eclipse 上运行,你可以使用我的程序,我得到这样的输出:

Stderr from p: [Ljava.lang.String;@186d4c1
Stderr from p: [Ljava.lang.String;@186d4c1
Stderr from p: [Ljava.lang.String;@186d4c1
Stderr from p: [Ljava.lang.String;@186d4c1
process have completed16

进程退出,返回码为 0你可以在这里看到进程完成 16

关于java - 无法使用 Java 程序从控制台中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com