【问题标题】:On Java 9 why is the output from System.getenv() incomplete in jshell?在 Java 9 上,为什么 System.getenv() 的输出在 jshell 中不完整?
【发布时间】:2017-09-22 22:01:58
【问题描述】:

我正在使用 Windows 10 并运行 Oracle 昨天发布的 Java 9 版本。

如果我打开 jshell 并输入 System.out.println(System.getenv()) 输出如预期的那样,如屏幕截图如下。

但是,如果我只是输入 System.getenv(),输出中间会丢失大量数据。请参阅下面屏幕截图的初始部分。这似乎是 jshell 的一个功能,因为在 System.getenv()...”)下方的屏幕截图中/strong>(在带有手绘黄色边缘的第二个框中)与缺失的数据完全对应。

缺少环境变量 CommonProgramFiles 的结尾部分,以及环境变量 SPRING_HOME 的开头部分,还有其他几个环境变量,例如 根本没有显示的路径

(出于隐私考虑,屏幕截图中的某些信息已被模糊处理。)

其他人是否看到同样的事情(或没有),是否有人对 jshell 这样做的原因有什么建议?

【问题讨论】:

    标签: read-eval-print-loop java-9 jshell


    【解决方案1】:

    JShell 会截断一些打印在 REPL 中的字符串结果。但是,它不会影响打印到控制台。

    我们可以看到同样的事情发生在运行这个:

    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.IntStream;
    List<Integer> x = IntStream.range(0,3000).mapToObj(Integer::valueOf).collect(Collectors.toList());
    x
    

    我们将在该输出中看到与省略号相同的截断。

    如果我们打印结果:

    System.out.println(x);
    

    我们没有看到这个。


    这是用户可配置的。例如,我们可以创建一个自定义格式模式,最多允许 40,000 个字符(我们可能不会遇到一个过高的数字,因此不会发生截断)。

    /set mode mine normal -command
    /set truncation mine 40000
    /set feedback mine
    

    这会创建一个名为 mine 的新反馈模式,它继承自内置模式 normal(显然 很多 个选项,所以我们从另一个模式继承,这样我们就不必担心设置所有内容)。详情请见/help /set mode

    第二个命令将截断设置为 40000 个字符。可以对其进行配置,以便截断取决于显示的内容类型。详情请见/help /set truncation

    最后,这里的最后一条命令切换到这个反馈模式。现在,控制台中显示的任何内容都将不再被截断,除非超过 40,000 个字符。

    This link 以及 official documentation 和上面的帮助命令有助于弄清楚这一点以便编写此答案。


    正常模式在截断前最多显示 1,000 个字符。单独使用/set truncation 显示各种截断设置或使用/set truncation normal 显示正常模式的设置。

    【讨论】:

    • 啊,从你的链接看来你可以使用“/set truncation ...”来配置它。然而我仍然无法弄清楚在 jshell 中具体指定什么来防止冗长的输出被截断......
    • @skomisa 我已经编辑了答案,以便它实际显示如何调整截断。我认为不可能完全阻止它,但这个答案显示了如何将显示的字符数设置得非常高。
    • 您的配置命令非常适合我。如果输出被截断,我还找到了一个解释省略号位置的链接:bugs.openjdk.java.net/browse/JDK-8166637
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2018-01-27
    相关资源
    最近更新 更多