是否有一个跨平台命令将打印到控制台?

时间:2014-11-18 14:51:48

标签: java linux windows unix cross-platform

我正在写一个"端到端"测试接受命令,运行它并以字符串形式返回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终端的命令。

有什么想法吗?

我不是在寻找关于"可测试性的评论"这段代码。

3 个答案:

答案 0 :(得分:1)

hostnamepingroutewhoamihelp,......?

答案 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)