【问题标题】:Not getting complete output java exec没有得到完整的输出java exec
【发布时间】:2014-03-20 18:42:27
【问题描述】:

我正在使用 Apache exec lib 运行以下命令。

wmic LOGICALDISK GET Name,ProviderName /FORMAT

此命令返回所有映射驱动器及其映射的列表。当我从命令行运行它时,它工作得很好。当我从 java 中运行它时,它返回前 2 个驱动器和中间列出的驱动器中的 1 个。

我已经将流通过管道传输到标准输出,使用了流 gobbler 等。我运行的其他几个命令都可以正常工作,并且我毫无问题地读取了流。我难住了。有任何想法吗?编码可能吗?我以前从来没有遇到过这个问题。

哦,我还使用 ProcessBuilder、Runtime.exec 和 DefaultExecutor 运行。始终相同的结果。

谢谢。

【问题讨论】:

  • 您是否尝试过运行“wmic LOGICALDISK GET Name,ProviderName /FORMAT > file.txt”并将其与您的结果进行比较?
  • 真的很奇怪。我的 jar 中有 mappings.cmd 文件,只需将其转储为 tmp 文件,以便我可以运行它。我正在使用 Netbeans,它会让我在内部执行文件。 Netbeans 甚至得到相同的输出。从命令行运行输出 C: D: G: \\SomeMachine\somedir F: \\SomeOtherMachine\otherdir Y: \\DomainController\domain Z: \\DBServer\dbdir 我从 java 运行时 C 执行它时得到的输出: D: F: \\SomeOtherMachine
  • 我执行了 rediredt 命令。如果我从命令行运行,那就完美了。如果我从 java 运行,文件中的输出仍然混乱。
  • 你确定你从进程的 stout 和 stderr 中读取?
  • 是的。我已经做了一百万种方法。奇怪的是,如果我从 ide 中将命令作为批处理文件运行,Netbeans 会得到相同的输出。我已经将 /OUTPUT 和 /APPEND 标记设置为文件、标准输出等。我可能只需要找到一种方法来使用启动批处理在启动时运行脚本,然后编写输出。

标签: java runtime exec wmi


【解决方案1】:

stdbuf -o0 wmic LOGICALDISK GET Name,ProviderName /FORMAT |猫

http://www.inreto.de/ffp/0.7/arm/packages/coreutils-8.14-arm-1.txz下载stdbuf

或者也许:

public static String execCmd(String cmd) throws java.io.IOException {
    Process proc = Runtime.getRuntime().exec(cmd);
    java.io.InputStream is = proc.getInputStream();
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    String val = "";
    if (s.hasNext()) {
        val = s.next();
    }
    else {
        val = "";
    }
    return val;
}

来自:https://stackoverflow.com/a/20624914/264181

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2015-01-26
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多