Java执行“time curl -s”命令

时间:2016-07-14 21:45:47

标签: java curl

我想执行此命令:

time curl -s 'URL HERE'

在Java中获得如下结果:

real    0m0.293s
user    0m0.100s
sys     0m0.052s

最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

执行命令的一般方法是调用fileRuntime.getRuntime().exec()将执行您提供的命令。但是,有几点需要注意:

首先,Runtime.getRuntime().exec()是一个shell内置命令。如果你只是打电话

time

然后您将收到以下错误:

Runtime.getRuntime().exec("time curl -s 'http://www.google.com/'");

您似乎可以使用Exception in thread "main" java.io.IOException: Cannot run program "time": error=2, No such file or directory

解决此问题
sh -c

但你不能。 Runtime.getRuntime().exec("sh -c \"time curl -s 'http://www.google.com/'\""); 使用空格字符分隔您通过参数提供的字符串而不考虑引号!这很烦人。您可以使用exec()修复此问题:

ProcessBuilder

这个命令不会失败,但它似乎也不会做任何事情!这是因为Java没有自动将执行的命令输出发送到标准输出。如果要执行此操作,则必须手动复制输出:

Process process = new ProcessBuilder("sh", "-c", "time curl -s 'http://www.google.com/'").start();

这会复制输出,但不会复制错误。您可以使用Process process = new ProcessBuilder("sh", "-c", "time curl -s 'http://www.google.com/'").start(); InputStream in = process.getInputStream(); int i; while (-1 != (i = in.read())){ System.out.write(i); } (返回process.getErrorStream())执行相同的复制过程。您也可以使用InputStream

redirectErrorStream()

THAT 是您在Java中正确执行命令的方式。

编辑: You could also download the file in Java natively.在这种情况下,您可以使用Process process = new ProcessBuilder("sh", "-c", "time curl -s 'http://www.google.com/'").redirectErrorStream(true).start(); InputStream in = process.getInputStream(); int i; while (-1 != (i = in.read())){ System.out.write(i); } 来计算需要多长时间。

答案 1 :(得分:1)

您必须使用API​​类:ProcessBuilder