我想执行此命令:
time curl -s 'URL HERE'
在Java中获得如下结果:
real 0m0.293s
user 0m0.100s
sys 0m0.052s
最好的方法是什么?
答案 0 :(得分:2)
执行命令的一般方法是调用file
。 Runtime.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