我正在写一个"端到端"测试接受命令,运行它并以字符串形式返回stdout输出的方法。它看起来像这样:
public static String runCommand(String ... command){}
我需要的是一个跨平台命令,它将一些内容写入控制台,因为我们有混合的Windows / Linux机器,我需要测试才能在任何地方运行。我不希望有if (os == 'windows')
类型的陈述。
我不想在这里System.out.println(command)
,我想执行代码并获得输出。
例如,sleep 5
将在Unix / Linux和Windows上休眠5秒,但不会输出任何内容。 echo hello
无法在Windows上工作,因为echo
是来自Unix终端的命令。
有什么想法吗?
我不是在寻找关于"可测试性的评论"这段代码。
答案 0 :(得分:1)
hostname
,ping
,route
,whoami
,help
,......?
答案 1 :(得分:0)
您必须使用Runtime
:
public static String runCommand(String command) throws IOException {
String output="";
Process p=Runtime.getRuntime().exec(command); // Execute the command
InputStream is=p.getInputStream(); // Get InputStream
byte[] buf=new byte[1024]; // Increase if you expect output above 1024 characters
is.read(buf); // Read the input and write to buf
output=new String(buf).trim(); // Remove the empty bytes at the end
return output;
}
如果您还想阅读任何错误,请添加以下代码:
InputStream es=p.getErrorStream();
byte[] ebuf=new byte[1024];
es.read(buf);
if(new String(ebuf).trim().length()!=0) { // If errors occured
output+="\n Errors: "+new String(ebuf).trim();
}
让我知道它是否有效 快乐编码:) -Charlie
答案 2 :(得分:0)
...
echo
你好在Windows上不起作用,因为echo是Unix终端上的命令
只是出于兴趣:这仍然是真的吗?
我似乎能够从Windows cmd提示符下运行echo test
,而(Windows7x64)和Wikipedia also seems to suggest echo
being available on Windows platforms也很好。还有一些Windows server documentation is listing echo
as a command。我将其用于与原始作者完全相同的目的,以测试子流程执行和stdout值。 (不过来自Python)