返回

Windows 命令行运行 Picocli 应用程序时如何显示子命令输出?

windows

从 Windows 命令行运行 Picocli 时显示子命令输出

问题

在 Windows 命令行中运行使用 Picocli 库开发的 Java 应用程序时,子命令的输出可能无法显示。此问题与 System.out 流的重定向有关。

解决方案

要解决此问题,需要将代码中的 System.out.println() 语句替换为 System.err.println() 语句。System.err 流不会被重定向,从而确保输出始终显示在控制台中。

具体步骤

1. 修改代码

在 TestCommand 类中,将 System.out.println() 替换为 System.err.println():

System.err.println("url : " + url);
System.err.println("running");

2. 保存并编译代码

将代码保存为 .java 文件,并在 Windows 命令行中使用 javacjava 命令进行编译和运行。

3. 验证输出

现在,子命令的输出应显示在 Windows 命令行中。

其他注意事项

  • 确保将代码保存为 .java 文件,并在 Windows 命令行中使用 javacjava 命令进行编译和运行。
  • 检查 Windows 命令行中的当前目录是否与 .java 文件所在目录相同。
  • 如果问题仍然存在,请尝试使用绝对路径运行代码。

常见问题解答

  1. 为什么 System.out 流会在 Windows 命令行中被重定向?
    Windows 命令行默认将 System.out 流重定向到空,以避免在运行某些命令时产生额外的输出。

  2. 为什么 System.err 流不会被重定向?
    System.err 流包含错误信息,对于调试和故障排除至关重要。因此,它不会被重定向。

  3. 除了使用 System.err.println() 之外,还有其他显示输出的方法吗?
    可以将 System.out 流重定向到 System.err 流,方法是使用 System.setOut(System.err)。但是,这将导致所有输出都显示在 System.err 流中,包括标准输出消息。

  4. 为什么我无法在子命令中看到输出?
    确保已正确修改代码以使用 System.err.println() 并在 Windows 命令行中正确运行代码。

  5. 如何调试 Picocli 应用程序?
    Picocli 提供了日志记录功能,可以通过在代码中添加 CommandLine.setErr(System.err) 来启用。这将显示 Picocli 库的调试信息。

结论

通过使用 System.err.println() 替换 System.out.println(),您可以确保从 Windows 命令行运行 Picocli 应用程序时显示子命令输出。通过遵循这些步骤,您可以轻松解决此常见问题并获得预期的输出。