gpt4 book ai didi

Java runtime.getruntime() 没有输出

转载 作者:行者123 更新时间:2023-12-01 12:05:24 28 4
gpt4 key购买 nike

我正在尝试通过Java将curl命令作为进程执行。当我执行它时,我根本没有得到任何输出。当我通过命令行执行相同的命令时,我得到了正确的输出。 URL 以 XML 形式返回输出。

这是我的 Java 程序的代码。

public static void exec(){
try {
Process p = Runtime.getRuntime().exec(new String[]{"curl", "http://genome.ucsc.edu/cgi-bin/das/mm9/dna\\?segment\\=chr1:3206424,3206499"});
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=null;
while((line=input.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

这是我通过命令行执行的命令

curl http://genome.ucsc.edu/cgi-bin/das/mm9/dna\?segment\=chr1:3206424,3206499

当我使用以下字符串数组运行 Java 程序时 {"ls", "-al"} 它给出了预期的输出

如果有任何帮助,我将不胜感激。

最佳答案

您无需等待流程完成。另外,您可以使用 ProcessBuilderinheritIO()类似

ProcessBuilder pb = new ProcessBuilder("curl",
"http://genome.ucsc.edu/cgi-bin/das/mm9/dna?"
+ "segment=chr1:3206424,3206499");
pb.inheritIO();
try {
Process p = pb.start();
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}

编辑

根据您下面的评论,您需要另一个线程。比如,

static class InputStreamReaderRunnable implements Runnable {
private StringBuilder sb;
private InputStream is;

public InputStreamReaderRunnable(InputStream is) {
this.is = is;
this.sb = new StringBuilder();
}

@Override
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
try {
while ((line = br.readLine()) != null) {
sb.append(line).append(System.lineSeparator());
}
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public String toString() {
return sb.toString();
}
}

public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("curl",
"http://genome.ucsc.edu/cgi-bin/das/mm9/dna?segment=chr1:3206424,3206499");
try {
Process p = pb.start();
InputStreamReaderRunnable isrr = new InputStreamReaderRunnable(
p.getInputStream());
Thread t = new Thread(isrr);
t.start();
p.waitFor();
t.join();
String out = isrr.toString();
System.out.println(out);
} catch (Exception e) {
e.printStackTrace();
}
}

关于Java runtime.getruntime() 没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27663801/

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