【问题标题】:Calling System command from java to save a log file从java调用系统命令来保存日志文件
【发布时间】:2012-09-05 11:38:54
【问题描述】:

我在从 Java 调用系统命令时遇到问题。我尝试了以下方法:

if (!found) {
    dbContents += ";" + getPreviousValue(i, dbContents);

    try {
        String cmd = "echo \"Device " + headers[i] + " no data incoming at " + timeString + "\" >> /home/envir/11/log.txt";
        Runtime.getRuntime().exec(cmd);
        Console.out("N");
    }
    catch(IOException ioe) {
        System.out.println(ioe);
}

问题是文件“log.txt”永远不会被创建。我检查过 if 子句是否被执行过,我可以看到这条消息

Console.out("N");

确实出现了,所以我不知道为什么前两行代码没有出现。

这是打印“N”的证据:

我必须说这是我第一次使用这种从 java 文件中调用系统命令的方法,所以这很可能是一个新手错误。

如果有人对此有答案,我将不胜感激。

提前致谢。

【问题讨论】:

    标签: java exception redirect logging console


    【解决方案1】:

    很可能你的命令失败了。任何错误消息都会发送到您忽略的 Process.getErrorStream(),因此您看不到它。

    在您的情况下,如果您想做的所有事情都附加到日志文件中,那么最好的方法是使用 Java。它更快、更干净、更有可能工作。

    PrintWriter pw = new PrintWriter(new FileWriter("/home/envir/11/log.txt", true));
    pw.println("Device " + headers[i] + " no data incoming at " + timeString);
    pw.close();
    

    问题可能是“echo”不是您系统上的程序。如果您正在运行一个 shell,它将具有仅在该 shell 运行时可用的命令。

    顺便说一句,>> 是只有 shell 才能理解的语法。

    【讨论】:

    • 感谢彼得的回复。我还在控制台中单独尝试了该命令,它确实创建了文件并附加了消息。当我从 Java 调用它时,问题就来了。尽管如此,我已经尝试了您的解决方案,它可以满足我的要求。就像你说的更快更干净。非常感谢!
    【解决方案2】:

    也许您的文件未创建,因为未评估重定向(“>>”)。 尝试像这样包装你的电话:

    String cmd = "sh -c \"echo \\\"Device " + headers[i] + " no data incoming at " + timeString + "\\\" >> /home/envir/11/log.txt\"";
    

    无论如何,你为什么不使用类似 FileWritter 的东西?

    【讨论】:

    • 感谢您的回复道格。我不知道FileWriter的存在嘿嘿。无论如何,我认为这也是命令上的错误。我也试过你的解决方案,它也没有创建 log.txt 文件。谢谢!
    猜你喜欢
    • 2019-09-08
    • 2013-06-02
    • 1970-01-01
    • 2011-05-23
    • 2013-03-12
    • 2014-04-22
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多