【问题标题】:Is there a way to get a path to the bit bucket like /dev/null in unix.?有没有办法在 unix 中获得像 /dev/null 这样的位桶的路径?
【发布时间】:2016-05-17 03:54:16
【问题描述】:

我想放弃 Process 的重定向错误。 我也知道 apache 中 NullWriter 的存在。 但是,Process 只接受 File,不是吗?

据我所知,像 /dev/null 这样的特殊文件(空设备)在 Windows 中有另一个路径,例如..

所以我的问题是我是否以及如何获得这样的路径? 否则,我应该为每个操作系统或平台手动设置一个吗?

我的代码是

File bitBucket = isUnix())? new File("/dev/null"): new File("NULL");
ProcessBuilder pb = new ProcessBuilder("mpirun", "-np", 100, "mpi-tip").redirectError(bitBucket);
pb.start();

我想更改第一行 文件 butBucket = getNullDevice(); // 像这样。

如果只有 ProcessBuilder 支持 Writer,我可以使用 NullWriter...

【问题讨论】:

  • 不清楚你想做什么。在您要求get a path to the bit bucket 的主题中,在您想要to abandon redirect error 的解决方案的描述中。你想达到什么目标?从子进程重定向错误流输出(stderr)?
  • 重定向是我的目的,也是我想问如何获取bit bucket的路径的原因。
  • 也许还值得解释一下bit bucket 的含义。显示一小段代码,显示您的问题。
  • 感谢您的评论。 “位桶”是指空设备,如 /dev/null 或 NUL 或......我的代码是这个 File bitbucket = new File("/dev/null"); // !!这里!!它将在 Windows 中为 NULL,但我喜欢做 File bitbucket = getNullDevice();例如 new ProcessBuilder("mpirun", "-np", String.valueOf(np), "mpi-tipsv") .redirectError(bitbucket)

标签: java file io


【解决方案1】:

也许您还需要提供更多信息。我假设您想抑制来自mpirun 的错误输出。默认情况下,启动进程的stdoutstderr 的输出不会合并到JVM 的输出中。

在下面找到一个用于演示的 sn-p

to_stderr.sh - 打印到 stdoutstderr 的帮助脚本

#!/bin/bash
(>&2 echo "to stderr")
echo "to stdout"

验证脚本

# supress output to stdout
./to_stderr.sh > /dev/null
to stderr

# supress output to stderr
./to_stderr.sh 2> /dev/null
to stdout

现在在 Java 中

class Main {
    public static void main(String[] args) throws Exception {
        ProcessBuilder pb = new ProcessBuilder("./to_stderr.sh");
        pb.start();
    }
}

编译运行

javac Main.java && java Main

这不会在控制台上输出任何内容,只要您不重定向错误或进程的输出。

那么为什么你想要/需要重定向到/dev/null

【讨论】:

  • 感谢您提供的示例。是的,......我只是想压制它。对不起让你困惑了。我应该按照您的建议使用脚本从 mpi 可执行文件中抛出输出吗? #!bin/bash mpirun mpiexe >/dev/null
  • @kensuke1984 在我的示例中,该脚本仅用于替换您的mpirun 命令。以我的示例 Java sn-p 为例,将 new ProcessBuilder("./to_stderr.sh"); 替换为 new ProcessBuilder("mpirun", "-np", 100, "mpi-tip");。你不应该从你的mpirun 执行中看到stderr 的输出。
  • 我明白了。我不知何故误解了redirectError的默认值是INHERIT,但它是PIPE ...谢谢你引导我。我不确定 PIPE 是如何工作的,但我会寻找解释。再次非常感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2012-07-30
  • 1970-01-01
相关资源
最近更新 更多