Windows 命令行运行 Picocli 应用程序时如何显示子命令输出?
2024-03-20 07:15:03
从 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 命令行中使用 javac
和 java
命令进行编译和运行。
3. 验证输出
现在,子命令的输出应显示在 Windows 命令行中。
其他注意事项
- 确保将代码保存为
.java
文件,并在 Windows 命令行中使用javac
和java
命令进行编译和运行。 - 检查 Windows 命令行中的当前目录是否与
.java
文件所在目录相同。 - 如果问题仍然存在,请尝试使用绝对路径运行代码。
常见问题解答
-
为什么 System.out 流会在 Windows 命令行中被重定向?
Windows 命令行默认将 System.out 流重定向到空,以避免在运行某些命令时产生额外的输出。 -
为什么 System.err 流不会被重定向?
System.err 流包含错误信息,对于调试和故障排除至关重要。因此,它不会被重定向。 -
除了使用 System.err.println() 之外,还有其他显示输出的方法吗?
可以将 System.out 流重定向到 System.err 流,方法是使用System.setOut(System.err)
。但是,这将导致所有输出都显示在 System.err 流中,包括标准输出消息。 -
为什么我无法在子命令中看到输出?
确保已正确修改代码以使用 System.err.println() 并在 Windows 命令行中正确运行代码。 -
如何调试 Picocli 应用程序?
Picocli 提供了日志记录功能,可以通过在代码中添加CommandLine.setErr(System.err)
来启用。这将显示 Picocli 库的调试信息。
结论
通过使用 System.err.println() 替换 System.out.println(),您可以确保从 Windows 命令行运行 Picocli 应用程序时显示子命令输出。通过遵循这些步骤,您可以轻松解决此常见问题并获得预期的输出。